ABSTRACT: Animal movements are often defined using the home range concept. Consequently, home ranges are determined by temporal, spatial, and individual-level processes. Within the environment, one of the key factors influencing an animal’s range and how it uses the environment is that of resources. Alterations to the environment that affect resource distribution and availability can have profound consequences on an animal’s spatial patterns. One of the best examples of this is that of golf courses. Some environmental modifications exhibited by some human altered environment can have positive effects on certain wildlife species by altering their movement patterns and foraging efforts. We analyzed data collected from 22 Gila Monsters Heloderma suspectum at a subsidized environment in Arizona from 2007 to 2013 and a non-subsidized environment. We performed both kernel density estimation and minimum convex polygons for comparability purposes. After adjusting for sex, number of fixes, and year, males in the subsidized environment had an average area of 15.9 ha while the females had an area of 5.9 ha. In the un-subsidized environment males had an average range of 38.8 ha while females had an area of 29.8 ha. This suggests that the home ranges may be smaller in subsidized environments than those of un-subsidized environments due to increases in available resources. There were also differences in home range overlap within and between sexes. In the subsidized population, there was very little male-male overlap with only two occurances, more female-female overlap and male-female overlap was increased. Male home ranges often overlapped several female home ranges. Gila Monsters may not have to invest in wide ranging foraging efforts as those populations of the un-subsidized environments.

Overview of the spatial ecology of Gila Monsters (Heloderma suspectum) at Stone Canyon Golf Club as a resource subsidized population vs. Owl Head Buttes representing the unsubsized natural population. Compared home range sizes of Heloderma suspectum between two populations. One represented a subsidized population at Stone Canyon Golf Club and the other at Owl Head Buttes representing the unsubsidized population. Stone Canyon is located in Oro Valley on the north end of Tucson, Arizona. Owl Head Buttes is located about 17 km straight line distance north west from Stone Canyon. Data at Owl Head was collected from 2000 - 2002, while fixes were collected from 2007 - 2013 at Stone Canyon. We Calculated minimum convex polygons using both 95 percent and 100 percent of the locations for each lizard, as well as 95% and 50% Kernel Density Estimations (KDE).

Figure 1 | Stone Canyon Golf Club, located in Oro Valley, Arizona on the northern edge of Tucson.

Summary of home range size.

Table 1 | Pooled overall home ranges of Gila Monsters at Owl Head Buttes and Stone Canyon Golf Club. Both 100% and 95% MCPs were calculated between both populations.



Table: Home range sizes of Stone Canyon and Owl head Buttes using both 95 percent and 100 percent MCPs.

Year   Gila   Sex      Environment      Home_Range_100mcp   N100   Home_Range_95mcp   N95
-----  -----  -------  --------------  ------------------  -----  -----------------  ----
2000   1      female   nonsubsidized                25.20     42              23.00    38
_      2      male     nonsubsidized                28.70    125              24.50   112
_      3      male     nonsubsidized                82.70     89              68.40    78
_      4      male     nonsubsidized                55.60     80              40.50    73
2001   1      female   nonsubsidized                20.10     26                 NA    NA
_      2      male     nonsubsidized                23.50     10                 NA    NA
_      3      male     nonsubsidized                60.10     18                 NA    NA
_      4      male     nonsubsidized                24.40     21                 NA    NA
_      10     male     nonsubsidized                28.50     14                 NA    NA
_      11     male     nonsubsidized                10.60     22                 NA    NA
_      12     male     nonsubsidized                23.60      7                 NA    NA
_      13     female   nonsubsidized                 8.90      9                 NA    NA
_      15     female   nonsubsidized                13.00     11                 NA    NA
_      50     female   nonsubsidized                21.00     11                 NA    NA
_      51     female   nonsubsidized                 7.10      8                 NA    NA
2002   2      male     nonsubsidized                66.20     38              40.00    37
_      4      male     nonsubsidized                73.10     76              55.50    73
_      10     male     nonsubsidized                39.50    111              33.30   105
_      11     male     nonsubsidized                39.30     92              31.90    88
_      12     male     nonsubsidized                49.50     66              41.50    63
_      13     female   nonsubsidized                26.30    101              23.70    96
_      15     female   nonsubsidized                39.20     98              21.30    94
_      17     female   nonsubsidized                47.60    106              29.10   101
_      50     female   nonsubsidized                15.80     68              14.10    66
_      51     female   nonsubsidized                18.50     57              12.40    57
2007   F104   female   subsidized                    3.37     18               3.37    19
_      F114   female   subsidized                    2.51      8               0.58     7
_      F36    female   subsidized                    5.05     20               3.49    19
_      F66    female   subsidized                   10.23     22               5.56    20
_      M112   male     subsidized                   12.51     13              12.51    12
_      M14    male     subsidized                    4.66     15               3.87    14
2008   F104   female   subsidized                    4.97     53               3.47    50
_      F114   female   subsidized                   11.96     52               9.38    49
_      F135   female   subsidized                    4.07     16               1.58    15
_      F137   female   subsidized                    5.98     15               5.75    14
_      F36    female   subsidized                    9.73     54               7.55    51
_      F66    female   subsidized                   11.29     51               9.95    48
_      M119   male     subsidized                   25.01     58              20.23    55
2009   F104   female   subsidized                    7.45     64               7.25    62
_      F114   female   subsidized                   11.46     52               8.28    49
_      F135   female   subsidized                    6.21     62               5.47    58
_      F137   female   subsidized                    6.09     35               5.68    33
_      F147   female   subsidized                   17.90     50              14.04    48
_      F36    female   subsidized                    7.48     62               5.83    60
_      F66    female   subsidized                   12.20     67              11.01    66
_      M112   female   subsidized                    7.89     71               1.73    70
_      M119   male     subsidized                   22.62     18              16.37    16
_      M69    male     subsidized                    1.91     69               1.91    69
_      F146   male     subsidized                   10.01     20               8.49    17
2010   F114   female   subsidized                    9.65     44               8.30    41
_      F137   female   subsidized                    6.32     45               5.26    42
_      F147   female   subsidized                   16.65     36              14.75    34
_      F200   female   subsidized                    5.36     34               5.23    33
_      F214   female   subsidized                    7.38     27               3.01    25
_      F36    female   subsidized                   38.81     50              12.16    47
_      F66    female   subsidized                   28.96     52              16.22    49
_      M112   male     subsidized                   20.46     26              14.41    24
_      M119   male     subsidized                   17.46     31               9.70    29
_      M69    male     subsidized                   13.85     30              10.75    28
2011   F114   female   subsidized                    5.91     22               3.30    20
_      F137   female   subsidized                    4.80     33               4.28    31
_      F147   female   subsidized                   19.44     24              12.90    22
_      F200   female   subsidized                    8.35     28               7.66    27
_      F214   female   subsidized                    6.61     22               5.66    21
_      F252   female   subsidized                    3.09     17               1.60    16
_      F36    female   subsidized                   11.93     23              10.95    21
_      F66    female   subsidized                    5.72      5               0.66     4
_      M14    male     subsidized                    4.48     13               3.84    12
_      M215   male     subsidized                   11.47     16              11.47    15
_      M255   male     subsidized                    5.85     16               5.59    15
2012   F114   female   subsidized                   10.17     54               7.15    51
_      F137   female   subsidized                    2.06     13               1.36    12
_      F147   female   subsidized                   17.64     52              16.75    49
_      F252   female   subsidized                    5.19     53               3.63    50
_      F36    female   subsidized                   10.34     52              10.30    49
_      M14    male     subsidized                    4.42     13               3.77    12
_      M215   male     subsidized                   11.04     21               9.85    20
_      M255   male     subsidized                    8.21     13               5.39    12
2013   F114   female   subsidized                    1.16      7               0.28     6
_      F147   female   subsidized                    0.31      6               0.00     5
_      F252   female   subsidized                      NA      4                 NA    NA
_      F36    female   subsidized                    0.13      6               0.00     5

Gila Monster Home Range Sizes at Stone Canyon vs. Owl Head Buttes.

Figure 1 | Non-Subsidized (Owl Head Buttes) vs. Subsidized (Stone Canyon) population 100% MCPs by number of fixes across the whole study interval.

Table 2 | Group 100% MCP home range means of raw data of Stone Canyon and Owl Head Buttes. Grouped by environment and sex.



Table: Group Means of Overall Home Ranges at Stone Canyon and Owl Head Buttes

Environment     Sex        N   Home_Range_100mcp          sd         se          ci
--------------  -------  ---  ------------------  ----------  ---------  ----------
nonsubsidized   female    11           22.063636   12.287414   3.704795    8.254797
nonsubsidized   male      14           43.235714   21.672372   5.792185   12.513255
subsidized      female    37            9.836757    6.984007   1.148164    2.328584
subsidized      male      16           11.707500    6.907877   1.726969    3.680948

Table 3 | Group 95% MCP home range means of raw data of Stone Canyon and Owl Head Buttes. Grouped by environment and sex.



Table: Group Means of Overall 95% MCP Home Ranges at Stone Canyon and Owl Head Buttes

Environment     Sex        N   Home_Range_95mcp          sd          se          ci
--------------  -------  ---  -----------------  ----------  ----------  ----------
nonsubsidized   female     6          20.600000    6.286493   2.5664502    6.597270
nonsubsidized   male       8          41.950000   13.987954   4.9454886   11.694222
subsidized      female    37           7.132432    4.339651   0.7134342    1.446912
subsidized      male      16           9.067500    5.094327   1.2735817    2.714575

Figure 3 | Raw overall mean home ranges between environment and sex. Note, that before adjusted home ranges, males exhibit smaller overall home ranges at Stone Canyon, than males of Owl Head Buttes.

Gila Monster Yearly Home Range Shifts of 100% MCPs.

Figure 4 | Yearly home range shifts of sub-sampled home ranges of 8 lizards, both males and females. Home range shifts appear to be relativley stable over study years.

Repeated measures ANOVA for Yearly Home Ranges by Sex.

Repeated Measure ANOVA for 100% MCP overall home ranges

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_100mcp ~ Environment + Year + Sex + N100 + Environment *  
    Sex + (1 | Gila)
   Data: year

REML criterion at convergence: 573.4

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.75980 -0.39242 -0.05151  0.28203  3.07570 

Random effects:
 Groups   Name        Variance Std.Dev.
 Gila     (Intercept) 29.62    5.443   
 Residual             82.78    9.098   
Number of obs: 79, groups:  Gila, 30

Fixed effects:
                                Estimate Std. Error         df t value Pr(>|t|)    
(Intercept)                   -1.072e+03  1.679e+03  7.165e+01  -0.638 0.525333    
Environmentsubsidized         -1.542e+01  8.207e+00  6.638e+01  -1.880 0.064559 .  
Year                           5.419e-01  8.389e-01  7.165e+01   0.646 0.520346    
Sexmale                        1.967e+01  4.862e+00  2.518e+01   4.046 0.000435 ***
N100                           1.917e-01  4.144e-02  5.484e+01   4.625 2.33e-05 ***
Environmentsubsidized:Sexmale -1.484e+01  6.081e+00  2.719e+01  -2.441 0.021450 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) Envrnm Year   Sexmal N100  
Envrnmntsbs  0.855                            
Year        -1.000 -0.856                     
Sexmale     -0.043  0.278  0.041              
N100         0.060  0.121 -0.062 -0.041       
Envrnmnts:S  0.012 -0.332 -0.011 -0.801  0.101

ANOVA Table: 100% MCP

Type III Analysis of Variance Table with Satterthwaite's method
                 Sum Sq Mean Sq NumDF  DenDF F value    Pr(>F)    
Environment      719.49  719.49     1 71.576  8.6920 0.0043136 ** 
Year              34.54   34.54     1 71.651  0.4173 0.5203462    
Sex             1351.82 1351.82     1 26.188 16.3309 0.0004154 ***
N100            1770.69 1770.69     1 54.843 21.3913 2.325e-05 ***
Environment:Sex  493.10  493.10     1 27.186  5.9570 0.0214502 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Repeated Measure ANOVA for 95% MCP overall home ranges

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_95mcp ~ Environment + Year + Sex + N100 + Environment *  
    Sex + (1 | Gila)
   Data: year

REML criterion at convergence: 416.1

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.5866 -0.3142 -0.0239  0.2939  2.1056 

Random effects:
 Groups   Name        Variance Std.Dev.
 Gila     (Intercept) 42.58    6.525   
 Residual             14.24    3.774   
Number of obs: 68, groups:  Gila, 30

Fixed effects:
                                Estimate Std. Error         df t value Pr(>|t|)    
(Intercept)                   -868.75075  808.91445   39.02219  -1.074 0.289432    
Environmentsubsidized          -17.87976    5.09289   57.98897  -3.511 0.000872 ***
Year                             0.44337    0.40411   39.02461   1.097 0.279296    
Sexmale                         21.82943    4.31027   25.65769   5.065 2.94e-05 ***
N100                             0.02367    0.03032   40.40428   0.781 0.439569    
Environmentsubsidized:Sexmale  -16.25133    4.97477   32.87969  -3.267 0.002548 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) Envrnm Year   Sexmal N100  
Envrnmntsbs  0.643                            
Year        -1.000 -0.647                     
Sexmale     -0.035  0.396  0.033              
N100        -0.006  0.276  0.003 -0.051       
Envrnmnts:S -0.002 -0.460  0.004 -0.865  0.044

ANOVA Table: 95% MCP

Type III Analysis of Variance Table with Satterthwaite's method
                Sum Sq Mean Sq NumDF  DenDF F value   Pr(>F)    
Environment     470.59  470.59     1 61.980 33.0376 2.96e-07 ***
Year             17.15   17.15     1 39.025  1.2038 0.279296    
Sex             430.74  430.74     1 32.267 30.2402 4.53e-06 ***
N100              8.68    8.68     1 40.404  0.6094 0.439569    
Environment:Sex 152.01  152.01     1 32.880 10.6717 0.002548 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Figure 5 | Adjusted home ranges between sexes of non-subsidized and subsidized populations. Adjusted for environment, year, sex, and sample size.

Table 3. Directional means of home range after being adjusted for year, sex and sample size.



Table: Adjusted Group Means of Overall Home Ranges at Stone Canyon and Owl Head Buttes

Environment     Sex          lsmean         SE         df    lower.CL   upper.CL
--------------  -------  ----------  ---------  ---------  ----------  ---------
nonsubsidized   female    23.739759   6.015077   66.85165   11.733125   35.74639
subsidized      female     8.314934   3.281775   46.24553    1.710009   14.91986
nonsubsidized   male      43.412310   6.061028   66.27236   31.312006   55.51261
subsidized      male      13.146356   3.754579   53.70952    5.617946   20.67477

Post-Hoc comparisons between sexes and environment:

$emmeans
Environment = nonsubsidized:
 Sex    emmean   SE   df lower.CL upper.CL
 female  23.74 6.02 66.8    11.73     35.7
 male    43.41 6.06 66.3    31.31     55.5

Environment = subsidized:
 Sex    emmean   SE   df lower.CL upper.CL
 female   8.31 3.28 46.2     1.71     14.9
 male    13.15 3.75 53.7     5.62     20.7

Degrees-of-freedom method: kenward-roger 
Confidence level used: 0.95 

$contrasts
Environment = nonsubsidized:
 contrast      estimate   SE   df t.ratio p.value
 female - male   -19.67 4.87 31.6 -4.041  0.0003 

Environment = subsidized:
 contrast      estimate   SE   df t.ratio p.value
 female - male    -4.83 3.71 36.4 -1.301  0.2014 

Graphical Comparisons of Sex Within Each Environment:

Figure 6 | Pairwise comparisons of home range between sexes within each environment. If red arrows overlap those of others, then there is no significant statistical difference.

$emmeans
Sex = female:
 Environment   emmean   SE   df lower.CL upper.CL
 nonsubsidized  23.74 6.02 66.8    11.73     35.7
 subsidized      8.31 3.28 46.2     1.71     14.9

Sex = male:
 Environment   emmean   SE   df lower.CL upper.CL
 nonsubsidized  43.41 6.06 66.3    31.31     55.5
 subsidized     13.15 3.75 53.7     5.62     20.7

Degrees-of-freedom method: kenward-roger 
Confidence level used: 0.95 

$contrasts
Sex = female:
 contrast                   estimate   SE   df t.ratio p.value
 nonsubsidized - subsidized     15.4 8.36 68.3 1.845   0.0694 

Sex = male:
 contrast                   estimate   SE   df t.ratio p.value
 nonsubsidized - subsidized     30.3 8.60 69.4 3.517   0.0008 

Graphical Comparisons of Sex between the two populations:

Figure 7 | Paiwise comparisons of sex between environments. If red arrows overlap those of others, then there is no significant statistical difference.

Seasonal Home Range.

Home range analysis broken down by five seasons; Emergence, Dry, Monsoon, Post Monsoon. The start of emergence was defined by when movement patterns increased from none/minimal to the start of high activity. Effort was taken to match as closely as possible to the Owl Head Buttes emergence date interval. Monsoon season was adjusted using NOAA climate data. The start of was defined when the mean dew point temperatures of three consecutive days were greater than 55 degrees.

Scaling home range analyses by seasonal estimates reduces the number or locations for each lizard. 100% MCPs were used for seasonal home range analyses to avoid any further reduction of locations for each estimation.

Figure 8 | Seasonal home range shifts of four lizards. Emergence and post-monsoon ranges stay realatively within each other. All seasonal polygons stay relatively stable without any major shifts away from other seasonal ranges.

Table 5 | Group means of seasonal home ranges between Stone Canyon (subsidized) and Owl Head Buttes (non-subsidized). These means are averaged across sex.

seasonal<-read.csv("SC_Seasonal_Data.csv")
library(Rmisc)
SEAS_GRP_Means <- summarySE(seasonal, measurevar="Home_Range_100mcp", groupvars=c("Environment","Season"), na.rm = TRUE)
# SEAS_GRP_Means
kable(SEAS_GRP_Means, format = "pandoc", caption = 'Raw Group Means of Seasonal Home Ranges at Stone Canyon')


Table: Raw Group Means of Seasonal Home Ranges at Stone Canyon

Environment     Season           N   Home_Range_100mcp          sd          se         ci
--------------  -------------  ---  ------------------  ----------  ----------  ---------
nonsubsidized   Dry             12          23.7166667   12.841682   3.7070742   8.159215
nonsubsidized   Emergence       10           2.8100000    3.121414   0.9870776   2.232925
nonsubsidized   Monsoon         13          23.6538462    9.446482   2.6199828   5.708452
nonsubsidized   Post_Monsoon    11           0.6909091    1.013365   0.3055411   0.680788
subsidized      Dry             17          13.0364706   10.574940   2.5647997   5.437133
subsidized      Emergence        9           2.0977778    1.649566   0.5498555   1.267969
subsidized      Monsoon         18          10.5600000    7.518662   1.7721657   3.738943
subsidized      Post_Monsoon    14           2.9885714    5.044404   1.3481737   2.912552

RMANOVA on Seasonal Home Ranges:

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_100mcp ~ Environment + Season + Sex + N + Environment *  
    Season + (1 | Gila)
   Data: seasonal

REML criterion at convergence: 638.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.0273 -0.5931 -0.0665  0.2579  3.2815 

Random effects:
 Groups   Name        Variance Std.Dev.
 Gila     (Intercept)  4.442   2.108   
 Residual             44.819   6.695   
Number of obs: 100, groups:  Gila, 30

Fixed effects:
                                          Estimate Std. Error        df t value Pr(>|t|)
(Intercept)                               14.61312    2.89899  78.80446   5.041 2.89e-06
Environmentsubsidized                     -6.62866    2.80355  88.30266  -2.364  0.02025
SeasonEmergence                          -15.53191    3.06290  69.30082  -5.071 3.16e-06
SeasonMonsoon                              2.99228    2.88291  67.22814   1.038  0.30302
SeasonPost_Monsoon                       -16.49965    3.21222  78.88963  -5.137 1.97e-06
Sexmale                                    2.64121    1.69487  29.11504   1.558  0.12995
N                                          0.10913    0.03989  72.75357   2.735  0.00782
Environmentsubsidized:SeasonEmergence      7.62510    4.16148  75.14358   1.832  0.07087
Environmentsubsidized:SeasonMonsoon       -6.17899    3.69021  67.26127  -1.674  0.09869
Environmentsubsidized:SeasonPost_Monsoon   9.36224    3.88337  68.51543   2.411  0.01860
                                            
(Intercept)                              ***
Environmentsubsidized                    *  
SeasonEmergence                          ***
SeasonMonsoon                               
SeasonPost_Monsoon                       ***
Sexmale                                     
N                                        ** 
Environmentsubsidized:SeasonEmergence    .  
Environmentsubsidized:SeasonMonsoon      .  
Environmentsubsidized:SeasonPost_Monsoon *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) Envrnm SsnEmr SsnMns SsnP_M Sexmal N      Env:SE Env:SM
Envrnmntsbs -0.629                                                        
SeasnEmrgnc -0.621  0.527                                                 
SeasonMonsn -0.581  0.562  0.524                                          
SsnPst_Mnsn -0.677  0.504  0.525  0.514                                   
Sexmale     -0.447  0.079  0.060  0.021  0.071                            
N           -0.581  0.003  0.193  0.065  0.341  0.313                     
Envrnmnt:SE  0.281 -0.614 -0.678 -0.366 -0.284  0.054  0.159              
Envrnmnt:SM  0.499 -0.696 -0.423 -0.786 -0.425 -0.051 -0.121  0.448       
Envrnm:SP_M  0.386 -0.654 -0.381 -0.407 -0.735  0.072 -0.005  0.443  0.501
Type III Analysis of Variance Table with Satterthwaite's method
                    Sum Sq Mean Sq NumDF  DenDF F value    Pr(>F)    
Environment         261.63  261.63     1 26.365  5.8375 0.0229042 *  
Season             2072.56  690.85     3 78.967 15.4143 5.534e-08 ***
Sex                 108.84  108.84     1 29.115  2.4285 0.1299532    
N                   335.38  335.38     1 72.754  7.4829 0.0078202 ** 
Environment:Season  920.94  306.98     3 71.524  6.8493 0.0004028 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Table 6 | Seasonal home range means between Stone Canyon (subsidized) and Owl Head Buttes (non-subsidized) popuations for males and females. These are raw means before being adjusted for environment, season, sex, and sample size.



Table: Seasonal Means by Sex Between Populations

Environment     Season         Sex        N   Home_Range_100mcp           sd          se           ci
--------------  -------------  -------  ---  ------------------  -----------  ----------  -----------
nonsubsidized   Dry            female     5          15.6600000    8.6291946   3.8590932   10.7145603
nonsubsidized   Dry            male       7          29.4714286   12.6476235   4.7803524   11.6971008
nonsubsidized   Emergence      female     5           4.4600000    3.4333657   1.5354478    4.2630866
nonsubsidized   Emergence      male       5           1.1600000    1.8242807   0.8158431    2.2651436
nonsubsidized   Monsoon        female     6          22.9833333    9.8151753   4.0070285   10.3003948
nonsubsidized   Monsoon        male       7          24.2285714    9.8668999   3.7293376    9.1253605
nonsubsidized   Post_Monsoon   female     4           1.4000000    1.4491377   0.7245688    2.3059014
nonsubsidized   Post_Monsoon   male       7           0.2857143    0.3670993   0.1387505    0.3395102
subsidized      Dry            female    11          10.1754545    8.0883118   2.4387178    5.4338018
subsidized      Dry            male       6          18.2816667   13.2661214   5.4158714   13.9219406
subsidized      Emergence      female     6           2.1133333    1.8474920   0.7542354    1.9388239
subsidized      Emergence      male       3           2.0666667    1.5326556   0.8848792    3.8073277
subsidized      Monsoon        female    11          10.6918182    8.4988679   2.5625051    5.7096172
subsidized      Monsoon        male       7          10.3528571    6.3010018   2.3815548    5.8274547
subsidized      Post_Monsoon   female    11           3.6309091    5.5527983   1.6742317    3.7304207
subsidized      Post_Monsoon   male       3           0.6333333    0.8007705   0.4623250    1.9892241

Figure 9 | Raw seasonal means of sexes between each environment. *WORKING GRAPH…

Adjusted Seasonal Means

Figure 10 | Adjusted seasonal home range means of sexes between environments. *WORKING GRAPH…

Post-Hoc comparisons between populations for seasonal home range analysis:

$emmeans
Season = Dry:
 Environment   emmean   SE   df lower.CL upper.CL
 nonsubsidized  18.86 2.25 88.4   14.383    23.34
 subsidized     12.23 1.75 87.4    8.745    15.72

Season = Emergence:
 Environment   emmean   SE   df lower.CL upper.CL
 nonsubsidized   3.33 2.24 88.7   -1.118     7.77
 subsidized      4.32 2.55 84.7   -0.741     9.39

Season = Monsoon:
 Environment   emmean   SE   df lower.CL upper.CL
 nonsubsidized  21.85 2.03 87.5   17.811    25.89
 subsidized      9.04 1.78 86.0    5.515    12.57

Season = Post_Monsoon:
 Environment   emmean   SE   df lower.CL upper.CL
 nonsubsidized   2.36 2.36 87.0   -2.322     7.04
 subsidized      5.09 2.07 85.8    0.981     9.21

Results are averaged over the levels of: Sex 
Degrees-of-freedom method: kenward-roger 
Confidence level used: 0.95 

$contrasts
Season = Dry:
 contrast                   estimate   SE   df t.ratio p.value
 nonsubsidized - subsidized    6.629 2.81 88.3  2.358  0.0206 

Season = Emergence:
 contrast                   estimate   SE   df t.ratio p.value
 nonsubsidized - subsidized   -0.996 3.32 87.7 -0.300  0.7648 

Season = Monsoon:
 contrast                   estimate   SE   df t.ratio p.value
 nonsubsidized - subsidized   12.808 2.66 87.2  4.814  <.0001 

Season = Post_Monsoon:
 contrast                   estimate   SE   df t.ratio p.value
 nonsubsidized - subsidized   -2.734 2.96 89.4 -0.924  0.3581 

Results are averaged over the levels of: Sex 

Graphical Comparisons of seasons between the two populatins:

Figure 11 | Pairwise comparisons of each season between environments. Overlapping red bars indicate no statistical difference.

$emmeans
Environment = nonsubsidized:
 Season       emmean   SE   df lower.CL upper.CL
 Dry           18.86 2.25 88.4   14.383    23.34
 Emergence      3.33 2.24 88.7   -1.118     7.77
 Monsoon       21.85 2.03 87.5   17.811    25.89
 Post_Monsoon   2.36 2.36 87.0   -2.322     7.04

Environment = subsidized:
 Season       emmean   SE   df lower.CL upper.CL
 Dry           12.23 1.75 87.4    8.745    15.72
 Emergence      4.32 2.55 84.7   -0.741     9.39
 Monsoon        9.04 1.78 86.0    5.515    12.57
 Post_Monsoon   5.09 2.07 85.8    0.981     9.21

Results are averaged over the levels of: Sex 
Degrees-of-freedom method: kenward-roger 
Confidence level used: 0.95 

$contrasts
Environment = nonsubsidized:
 contrast                 estimate   SE   df t.ratio p.value
 Dry - Emergence            15.532 3.07 69.4  5.054  <.0001 
 Dry - Monsoon              -2.992 2.89 67.3 -1.036  0.7292 
 Dry - Post_Monsoon         16.500 3.24 78.9  5.098  <.0001 
 Emergence - Monsoon       -18.524 2.91 68.0 -6.361  <.0001 
 Emergence - Post_Monsoon    0.968 3.08 73.0  0.314  0.9891 
 Monsoon - Post_Monsoon     19.492 3.03 74.0  6.426  <.0001 

Environment = subsidized:
 contrast                 estimate   SE   df t.ratio p.value
 Dry - Emergence             7.907 3.11 88.6  2.543  0.0602 
 Dry - Monsoon               3.187 2.28 66.0  1.395  0.5070 
 Dry - Post_Monsoon          7.137 2.68 80.2  2.666  0.0450 
 Emergence - Monsoon        -4.720 3.20 89.6 -1.475  0.4569 
 Emergence - Post_Monsoon   -0.769 2.94 77.2 -0.262  0.9937 
 Monsoon - Post_Monsoon      3.951 2.78 84.9  1.421  0.4899 

Results are averaged over the levels of: Sex 
P value adjustment: tukey method for comparing a family of 4 estimates 

Graphical Comparisons between seasons within the two populations:

Figure 12 | Pairwise comparisons between seasons within each environment. Overlapping red bars indicate no statistical difference.

Pairwise seasonal comparisons between sexes of the subsidized population

$emmeans
Season = Dry:
 Sex    emmean   SE   df lower.CL upper.CL
 female   6.92 2.19 47.2    2.523     11.3
 male    20.36 2.77 48.3   14.798     25.9

Season = Emergence:
 Sex    emmean   SE   df lower.CL upper.CL
 female   5.00 2.91 45.2   -0.853     10.9
 male     5.63 4.00 49.0   -2.403     13.7

Season = Monsoon:
 Sex    emmean   SE   df lower.CL upper.CL
 female   6.27 2.34 46.2    1.560     11.0
 male    11.39 2.51 48.4    6.354     16.4

Season = Post_Monsoon:
 Sex    emmean   SE   df lower.CL upper.CL
 female   5.94 2.09 47.9    1.738     10.1
 male     3.09 3.99 48.5   -4.937     11.1

Degrees-of-freedom method: kenward-roger 
Confidence level used: 0.95 

$contrasts
Season = Dry:
 contrast      estimate   SE   df t.ratio p.value
 female - male  -13.441 3.68 47.2 -3.653  0.0006 

Season = Emergence:
 contrast      estimate   SE   df t.ratio p.value
 female - male   -0.632 4.73 49.0 -0.134  0.8943 

Season = Monsoon:
 contrast      estimate   SE   df t.ratio p.value
 female - male   -5.121 3.53 47.1 -1.449  0.1539 

Season = Post_Monsoon:
 contrast      estimate   SE   df t.ratio p.value
 female - male    2.847 4.36 48.9  0.652  0.5173 

Graphical Comparisons between sex within the subsidized population:

Table 7 | Mean individual seasoanl home ranges pooled from the entire study period. Missing values are depicted where no locations for that animal during that period were successfull.



Table: Seasonal Individual Home Ranges.

X        Emergence   X.1         X.2     Dry     X.3     Monsoon   X.4      Post.Monsoon   X.5   
-------  ----------  ----------  ------  ------  ------  --------  -------  -------------  ------
Lizard   Sex         Area (ha)   N       Area    N       Area      N        Area           N     
M69      Male        0.33        4.00    36.73   24.00   14.84     22.00    0.07           8.00  
M67      Male        NA          NA      5.71    9.00    7.72      7.00     NA             NA    
M255     Male        3.23        7.00    NA      NA      1.07      9.00     NA             NA    
M215     Male        2.64        7.00    8.28    11.00   7.22      12.00    NA             NA    
M14      Male        NA          NA      6.20    15.00   7.50      10.00    NA             NA    
M119     Male        NA          NA      27.84   17.00   19.98     67.00    1.55           9.00  
M112     Male        NA          NA      24.93   16.00   14.14     29.00    0.28           8.00  
F66      Female      0.33        5.00    9.60    97.00   33.65     79.00    1.36           16.00 
F36      Female      2.94        12.00   24.99   99.00   10.30     118.00   19.14          27.00 
F252     Female      1.27        8.00    2.54    14.00   6.48      30.00    0.39           9.00  
F214     Female      NA          NA      5.04    10.00   7.79      28.00    1.87           9.00  
F200     Female      NA          NA      4.71    8.00    4.23      40.00    2.05           12.00 
F147     Female      5.44        14.00   25.52   57.00   18.21     70.00    7.14           18.00 
F146     Female      NA          NA      9.55    22.00   5.97      17.00    0.03           7.00  
F137     Female      1.71        6.00    6.54    43.00   6.95      62.00    2.19           17.00 
F135     Female      NA          N       3.71    25.00   5.72      48.00    0.68           5.00  
F114     Female      0.99        12.00   13.66   99.00   10.72     84.00    4.56           24.00 
F104     Female      NA          NA      6.07    70.00   7.59      49.00    0.53           13.00 
                                                                                                 
Means    Overall     1.89                13.04           10.56              2.99                 
         Male        2.07                18.28           10.35              0.63                 
         Female      2.11                10.18           10.69              3.63                 

Gila Monster Home Range Overlap of 100% MCPs.

Figure 13 | Interactive map: Home Range overlap by sex of 100% MCPs at Stone Canyon. Red polygons represent female lizards, and blue represents male lizards.

Figure 14 | Interactive map: Home Range overlap by sex of 95% KDEs at Stone Canyon. Red polygons represent female lizards, and blue represents male lizards.

The Stone Canyon population seems to exhibit greater female-female overlap as well as considerable overlap of male-female home ranges. There appears to be limited male-male overlap, with occurance happening in only two male-male home range polygons. This finding is in contrast to the Owl Head buttes study which revealed that there was a large degree of overlap among male-female and male-male overlaps (Table x). Gillardo concluded that, in their study, the high degree of overlap in males-males interactions may be due to having larger home ranges for mate searching activities. Males may have and increased home range size to maximize their access to multiple females. She concluded that the lack of female-female overlap may be due to smaller home range sizes.

At Stone Canyon, males have reduced home range sizes (Table 6; Fig. 4). However, males still retain home range overlap with multiple females while having reduced contact with other males. This may be in response to nutrient subsidies that reduce the need to have expanded home range sizes for foraging activities for both males and females. There may also be a higher density of females as a response to resource availability and reduced range requirements. Males are not forced to expand home ranges for mate searching to the extant that individuals at Owl Head Buttes may be subject to.

Table 8 | Home range overlap of Gila Monsters at the nutrient subsidized site. Male-male overlaps only occured between two pairs of males: M14-M69 and M119-M215 at 0.5 ha. and 19.5 ha. respectively and were therefore not included in the table.



Table: Home range overlap of Stone Canyon Gila Monsters using 100% MCPs.

ID              F36          F66    F104   F135   F137   F146   F147   X             M14           M67    M69    M112    M119    M215    M255 
--------------  -----------  -----  -----  -----  -----  -----  -----  ------------  ------------  -----  -----  ------  ------  ------  -----
Female:Female                                                          Male:Female                                                            
F36             _            5.13   _      _      _      4.65   _                    _             _      _      _       19.44   18.51   _    
F66             5.13         _      _      _      _      5.05   _                    _             _      2.6    _       _       _       _    
F104            _            _      _      0.5           _      _                    _             _      _      _       _       _       _    
F114            _            _      _      _      _      _      _                    _             _      _      5.82    _       _       _    
F135            _            _      0.5    _      2.89   _      3.94                 _             _      2.04   _       _       _       _    
F137            _            _      _      2.89   _      _      7.91                 _             _      0.55   _       _       _       _    
F146            4.65         5.05   _      _      _      _      _                    0.14          _      0.76   _       _       _       _    
F147            _            _      _      3.94   7.91   _      _                    3.73          0.21   4.6    _       _       _       _    
F200            _            _      _      _      _      _      _                    _             _      _      6.49    _       _       _    
F252            _            _      _      _      _      _      _                    _             _      _      _       _       _       3.45 
                                                                                                                                              
Mean =          4.3 ± 0.86                                             Mean =        5.26 ± 1.78                                              
                                                                                                                                              
                                                                                                                                              
ID              F36          F66    F104   F135   F137   F146   F147                 M14           M67    M69    M112    M119    M215    M255 
Female:Female                                                          Male:Female                                                            
Net             6.84         7.25   0.5    4.44   7.91   6.77   8.96                 3.87          0.21   8.57   12.31   21.24   20.32   3.45 
Prportion       0.2          0.2    0.1    0.5    1      0.7    0.3                  0.4           0.02   0.5    0.4     0.6     1       0.2  

Gila Monster Proportion of Refuge Use. Mixed effects RMANOVA for seasonal refuge use. Refuge catagorizations include Rock, Burrow and Midden.

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AVG_PROP_YR_LIZ ~ COVERTYPE + SEASON + SEX + YEAR + COVERTYPE *  
    SEASON + (1 | LIZARDNUMBER)
   Data: Refugia

REML criterion at convergence: -153

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.7127 -0.6226 -0.1802  0.5562  3.5758 

Random effects:
 Groups       Name        Variance  Std.Dev.
 LIZARDNUMBER (Intercept) 0.0002518 0.01587 
 Residual                 0.0154691 0.12437 
Number of obs: 158, groups:  LIZARDNUMBER, 21

Fixed effects:
                                     Estimate Std. Error         df t value Pr(>|t|)    
(Intercept)                         -7.700460  14.076150  32.071409  -0.547 0.588126    
COVERTYPEMidden                     -0.020036   0.051328 133.473533  -0.390 0.696892    
COVERTYPERocks                      -0.063939   0.042135 126.493669  -1.517 0.131640    
SEASONEmergence                     -0.133105   0.047284 139.729056  -2.815 0.005583 ** 
SEASONMonsoon                       -0.043444   0.042209 129.438281  -1.029 0.305277    
SEASONPost-Monsoon                  -0.060754   0.042217 128.072266  -1.439 0.152566    
SEXMale                              0.055117   0.022639  13.273789   2.435 0.029725 *  
YEAR                                 0.003946   0.007008  32.081783   0.563 0.577293    
COVERTYPERocks:SEASONEmergence       0.239451   0.068673 130.604344   3.487 0.000666 ***
COVERTYPEMidden:SEASONMonsoon        0.042844   0.067202 127.927256   0.638 0.524914    
COVERTYPERocks:SEASONMonsoon         0.066350   0.059018 126.524094   1.124 0.263041    
COVERTYPEMidden:SEASONPost-Monsoon  -0.075480   0.082151 132.158201  -0.919 0.359879    
COVERTYPERocks:SEASONPost-Monsoon    0.033366   0.059934 124.298904   0.557 0.578723    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
fit warnings:
fixed-effect model matrix is rank deficient so dropping 1 column / coefficient

ANOVA table of refuge use RMANOVA for complete data set:

Type III Analysis of Variance Table with Satterthwaite's method
                   Sum Sq  Mean Sq NumDF   DenDF F value  Pr(>F)  
COVERTYPE        0.017928 0.008964     2 132.711  0.5795 0.56160  
SEASON           0.105661 0.035220     3 138.017  2.2768 0.08243 .
SEX              0.091693 0.091693     1  13.274  5.9275 0.02972 *
YEAR             0.004905 0.004905     1  32.082  0.3171 0.57729  
COVERTYPE:SEASON 0.238481 0.047696     5 128.651  3.0833 0.01159 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

RMANOVA of the entire data set suggested that there was no affect of year on refuge use (df = 5, F = 1.94, P = 0.09). Therefore, I performed Mixed Effects RMANOVA for each refuge type while not including year in the model, then conducted pairwise comparisons for each refuge type across seasons.

Ran RMANOVA for each refuge type and pairwise comparisons across each season:

Rocks

Type III Analysis of Variance Table with Satterthwaite's method
             Sum Sq  Mean Sq NumDF  DenDF F value  Pr(>F)  
SEASON     0.054242 0.018081     3 37.289  3.9337 0.01556 *
SEX        0.017170 0.017170     1 18.228  3.7355 0.06896 .
SEASON:SEX 0.019296 0.006432     3 37.289  1.3994 0.25820  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Pairwise comparisons between seasons for rock refuge sites:

$emmeans
 SEASON       emmean     SE   df lower.CL upper.CL
 Dry          0.1435 0.0216 43.4   0.0999    0.187
 Emergence    0.1008 0.0324 54.9   0.0359    0.166
 Monsoon      0.1733 0.0203 39.7   0.1324    0.214
 Post-Monsoon 0.0982 0.0221 44.8   0.0536    0.143

Results are averaged over the levels of: SEX 
Degrees-of-freedom method: kenward-roger 
Confidence level used: 0.95 

$contrasts
 contrast                 estimate     SE   df t.ratio p.value
 Dry - Emergence           0.04265 0.0339 41.0  1.257  0.5951 
 Dry - Monsoon            -0.02988 0.0231 38.7 -1.293  0.5730 
 Dry - Post-Monsoon        0.04523 0.0244 38.5  1.854  0.2644 
 Emergence - Monsoon      -0.07253 0.0334 41.5 -2.169  0.1488 
 Emergence - Post-Monsoon  0.00258 0.0339 40.4  0.076  0.9998 
 Monsoon - Post-Monsoon    0.07511 0.0236 39.1  3.180  0.0147 

Results are averaged over the levels of: SEX 
P value adjustment: tukey method for comparing a family of 4 estimates 

Burrow

Type III Analysis of Variance Table with Satterthwaite's method
             Sum Sq  Mean Sq NumDF DenDF F value    Pr(>F)    
SEASON     0.134062 0.044687     3    57  8.2093 0.0001249 ***
SEX        0.000525 0.000525     1    57  0.0965 0.7572312    
SEASON:SEX 0.018319 0.006106     3    57  1.1217 0.3479249    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Pairwise comparisons between seasons for burrow refuge sites:

$emmeans
 SEASON       emmean     SE df lower.CL upper.CL
 Dry          0.1595 0.0175 57  0.12436   0.1946
 Emergence    0.0452 0.0213 57  0.00268   0.0878
 Monsoon      0.1640 0.0188 57  0.12631   0.2017
 Post-Monsoon 0.0977 0.0188 57  0.06009   0.1354

Results are averaged over the levels of: SEX 
Degrees-of-freedom method: kenward-roger 
Confidence level used: 0.95 

$contrasts
 contrast                 estimate     SE   df t.ratio p.value
 Dry - Emergence           0.11425 0.0275 45.0  4.155  0.0008 
 Dry - Monsoon            -0.00452 0.0257 46.0 -0.175  0.9981 
 Dry - Post-Monsoon        0.06177 0.0257 44.0  2.405  0.0910 
 Emergence - Monsoon      -0.11877 0.0284 46.1 -4.188  0.0007 
 Emergence - Post-Monsoon -0.05248 0.0283 43.4 -1.856  0.2621 
 Monsoon - Post-Monsoon    0.06629 0.0265 43.2  2.497  0.0745 

Results are averaged over the levels of: SEX 
P value adjustment: tukey method for comparing a family of 4 estimates 

Midden

Type III Analysis of Variance Table with Satterthwaite's method
             Sum Sq  Mean Sq NumDF  DenDF F value Pr(>F)  
SEASON     0.124380 0.062190     2 16.453  5.8014 0.0124 *
SEX        0.015098 0.015098     1 16.585  1.4084 0.2520  
SEASON:SEX 0.027624 0.027624     1 16.508  2.5769 0.1274  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Pairwise comparisons between seasons for midden refuge sites:

$emmeans
 SEASON       emmean     SE df lower.CL upper.CL
 Dry           0.133 0.0385 25   0.0541    0.213
 Monsoon       0.195 0.0263 25   0.1408    0.249
 Post-Monsoon nonEst     NA NA       NA       NA

Results are averaged over the levels of: SEX 
Degrees-of-freedom method: kenward-roger 
Confidence level used: 0.95 

$contrasts
 contrast               estimate     SE   df t.ratio p.value
 Dry - Monsoon           -0.0617 0.0465 17.8 -1.328  0.3987 
 Dry - Post-Monsoon       nonEst     NA   NA     NA      NA 
 Monsoon - Post-Monsoon   nonEst     NA   NA     NA      NA 

Results are averaged over the levels of: SEX 
P value adjustment: tukey method for comparing a family of 3 estimates 

Analyses suggests that there is an effect of season across all three refuge types, but there is no interaction of sex and season on chosen refuge types (Table 11). Before post-hoc pairwise comparisons, the proportion of refuge use for rocks was higher in emergence (0.37). This may be due to Gila Monsters prefering more rocky refugia for hibernacula use. However, lizards seem to have used rocky refugia in smaller proportions throught the dry, monsoon and post-monsoon seasons (Table 9). During the dry season Gila Monsters exhibited a higher proportion of refuge use in burrows (0.26), but maintained about the same use of burrows through the post-monsoon season (Tables 9-10). Gila Monsters chose midden refuge types only in the dry and monsoon seasons (0.21 and 0.23 respectively). However, both the burrow and midden refuge types were both used throughtout the dry and monsoon seasons.

Post-Hoc analyses suggested that there was some differentiated refuge selection across seasons. Rock refuge types seemed to be generally selected for across all four seasons, although there was a significant difference in proportional use during post-monsoon. Burrows were selected for significantly more during the dry, monsoon and post-monsoon seasons with minimal use during emergence, where they seem to be more associated with rock refugia (Table 10.). Midden type refuge sites were predominantly chosen within the dry and monsoon seasons, but with minimal use in the post-monsoon (Table 10). Midden refuge types were not chosen often, with rock and burrow types chosen more frequently. Generally, rock and burrow refuge types were used readily without much preference between the two after emergence.

Table 9 | Mean proportinal use of refuge types across each season by sex.



Table: Refuge Use Proportional Means by Sex and Season

Refuge.Type   X         Emergence    Dry   Monsoon   Post_Monsoon
------------  -------  ----------  -----  --------  -------------
Rock                           NA     NA        NA             NA
              Male           0.50   0.20      0.25           0.27
              Female         0.23   0.18      0.19           0.11
              Mean           0.37   0.19      0.22           0.19
                               NA     NA        NA             NA
Burrow                         NA     NA        NA             NA
              Male           0.19   0.28      0.16           0.23
              Female         0.08   0.23      0.23           0.16
              Mean           0.14   0.26      0.20           0.20
                               NA     NA        NA             NA
Midden                         NA     NA        NA             NA
              Male           0.00   0.17      0.25           0.00
              Female         0.00   0.24      0.21           0.07
              Mean           0.00   0.21      0.23           0.04

Table 10 | Post-Hoc camparisons of each refuge type between seasonal combinations.



Table: Post Hoc Pairwise Comparisons of Refuge Types

Refuge.Type   Seasonal.Comparisons     P.Value 
------------  -----------------------  --------
Rock                                           
              Emergence:Dry            0.68    
              Emergence:Monsoon        0.12    
              Emergence:Post Monsoon   0.99    
              Dry:Monsoon              0.36    
              Dry:Post Monsoon         0.35    
              Monsoon:Post Monsoon     0.009*  
                                               
Burrow                                         
              Emergence:Dry            0.001*  
              Emergence:Monsoon        0.0006* 
              Emergence:Post Monsoon   0.23    
              Dry:Monsoon              0.99    
              Dry:Post Monsoon         0.12    
              Monsoon:Post Monsoon     0.07    
                                               
Midden                                         
              Emergence:Dry            NA      
              Emergence:Monsoon        NA      
              Emergence:Post Monsoon   NA      
              Dry:Monsoon              0.39    
              Dry:Post Monsoon         NA      
              Monsoon:Post Monsoon     NA      

Table 11. ANOVA table after conducting Mixed Effects RMANOVA for each refuge type across seasons.



Table: ANOVA Table of RM Analysis for Refuge Use

X        Effect        DF      F  Pr..F.  
-------  -----------  ---  -----  --------
Rock                   NA     NA          
         Season         3   4.24  0.01*   
         Sex            1   3.04  0.09    
         Sex:Season     3   1.54  0.22    
                       NA     NA          
Burrow                 NA     NA          
         Season         3   8.04  0.0001* 
         Sex            1   0.16  0.68    
         Sex:Season     3   0.97  0.41    
                       NA     NA          
Midden                 NA     NA          
         Season         2   5.81  0.01*   
         Sex            1   1.41  0.25    
         Sex:Season     1   2.58  0.12    
LS0tCnRpdGxlOiAiU3BhdGlhbCBFY29sb2d5IEdpbGEgTW9uc3RlcnMgaW4gYSBSZXNvdXJjZSBTdWJzaWRpemVkIEVudmlyb25tZW50IgphdXRob3I6ICJNLiBQaWVyc29uIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAogIGZpZ19jYXB0aW9uOiB5ZXMKICBudW1iZXJfc2VjdGlvbnM6IHllcwotLS0KCkFCU1RSQUNUOgpBbmltYWwgbW92ZW1lbnRzIGFyZSBvZnRlbiBkZWZpbmVkIHVzaW5nIHRoZSBob21lIHJhbmdlIGNvbmNlcHQuIENvbnNlcXVlbnRseSwgaG9tZSByYW5nZXMgYXJlIGRldGVybWluZWQgYnkgdGVtcG9yYWwsIHNwYXRpYWwsIGFuZCBpbmRpdmlkdWFsLWxldmVsIHByb2Nlc3Nlcy4gV2l0aGluIHRoZSBlbnZpcm9ubWVudCwgb25lIG9mIHRoZSBrZXkgZmFjdG9ycyBpbmZsdWVuY2luZyBhbiBhbmltYWzigJlzIHJhbmdlIGFuZCBob3cgaXQgdXNlcyB0aGUgZW52aXJvbm1lbnQgaXMgdGhhdCBvZiByZXNvdXJjZXMuICBBbHRlcmF0aW9ucyB0byB0aGUgZW52aXJvbm1lbnQgdGhhdCBhZmZlY3QgcmVzb3VyY2UgZGlzdHJpYnV0aW9uIGFuZCBhdmFpbGFiaWxpdHkgY2FuIGhhdmUgcHJvZm91bmQgY29uc2VxdWVuY2VzIG9uIGFuIGFuaW1hbOKAmXMgc3BhdGlhbCBwYXR0ZXJucy4gT25lIG9mIHRoZSBiZXN0IGV4YW1wbGVzIG9mIHRoaXMgaXMgdGhhdCBvZiBnb2xmIGNvdXJzZXMuICBTb21lIGVudmlyb25tZW50YWwgbW9kaWZpY2F0aW9ucyBleGhpYml0ZWQgYnkgc29tZSBodW1hbiBhbHRlcmVkIGVudmlyb25tZW50IGNhbiBoYXZlIHBvc2l0aXZlIGVmZmVjdHMgb24gY2VydGFpbiB3aWxkbGlmZSBzcGVjaWVzIGJ5IGFsdGVyaW5nIHRoZWlyIG1vdmVtZW50IHBhdHRlcm5zIGFuZCBmb3JhZ2luZyBlZmZvcnRzLiAgV2UgYW5hbHl6ZWQgZGF0YSBjb2xsZWN0ZWQgZnJvbSAyMiBHaWxhIE1vbnN0ZXJzIEhlbG9kZXJtYSBzdXNwZWN0dW0gYXQgYSBzdWJzaWRpemVkIGVudmlyb25tZW50IGluIEFyaXpvbmEgZnJvbSAyMDA3IHRvIDIwMTMgYW5kIGEgbm9uLXN1YnNpZGl6ZWQgZW52aXJvbm1lbnQuICBXZSBwZXJmb3JtZWQgYm90aCBrZXJuZWwgZGVuc2l0eSBlc3RpbWF0aW9uIGFuZCBtaW5pbXVtIGNvbnZleCBwb2x5Z29ucyBmb3IgY29tcGFyYWJpbGl0eSBwdXJwb3Nlcy4gIEFmdGVyIGFkanVzdGluZyBmb3Igc2V4LCBudW1iZXIgb2YgZml4ZXMsIGFuZCB5ZWFyLCBtYWxlcyBpbiB0aGUgc3Vic2lkaXplZCBlbnZpcm9ubWVudCBoYWQgYW4gYXZlcmFnZSBhcmVhIG9mIDE1LjkgaGEgd2hpbGUgdGhlIGZlbWFsZXMgaGFkIGFuIGFyZWEgb2YgNS45IGhhLiAgSW4gdGhlIHVuLXN1YnNpZGl6ZWQgZW52aXJvbm1lbnQgbWFsZXMgaGFkIGFuIGF2ZXJhZ2UgcmFuZ2Ugb2YgMzguOCBoYSB3aGlsZSBmZW1hbGVzIGhhZCBhbiBhcmVhIG9mIDI5LjggaGEuICBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGhvbWUgcmFuZ2VzIG1heSBiZSBzbWFsbGVyIGluIHN1YnNpZGl6ZWQgZW52aXJvbm1lbnRzIHRoYW4gdGhvc2Ugb2YgdW4tc3Vic2lkaXplZCBlbnZpcm9ubWVudHMgZHVlIHRvIGluY3JlYXNlcyBpbiBhdmFpbGFibGUgcmVzb3VyY2VzLiBUaGVyZSB3ZXJlIGFsc28gZGlmZmVyZW5jZXMgaW4gaG9tZSByYW5nZSBvdmVybGFwIHdpdGhpbiBhbmQgYmV0d2VlbiBzZXhlcy4gSW4gdGhlIHN1YnNpZGl6ZWQgcG9wdWxhdGlvbiwgdGhlcmUgd2FzIHZlcnkgbGl0dGxlIG1hbGUtbWFsZSBvdmVybGFwIHdpdGggb25seSB0d28gb2NjdXJhbmNlcywgbW9yZSBmZW1hbGUtZmVtYWxlIG92ZXJsYXAgYW5kIG1hbGUtZmVtYWxlIG92ZXJsYXAgd2FzIGluY3JlYXNlZC4gTWFsZSBob21lIHJhbmdlcyBvZnRlbiBvdmVybGFwcGVkIHNldmVyYWwgZmVtYWxlIGhvbWUgcmFuZ2VzLiBHaWxhIE1vbnN0ZXJzIG1heSBub3QgaGF2ZSB0byBpbnZlc3QgaW4gd2lkZSByYW5naW5nIGZvcmFnaW5nIGVmZm9ydHMgYXMgdGhvc2UgcG9wdWxhdGlvbnMgb2YgdGhlIHVuLXN1YnNpZGl6ZWQgZW52aXJvbm1lbnRzLiAgCgoKT3ZlcnZpZXcgb2YgdGhlIHNwYXRpYWwgZWNvbG9neSBvZiBHaWxhIE1vbnN0ZXJzICgqSGVsb2Rlcm1hIHN1c3BlY3R1bSopIGF0IFN0b25lIENhbnlvbiBHb2xmIENsdWIgYXMgYSByZXNvdXJjZSBzdWJzaWRpemVkIHBvcHVsYXRpb24gdnMuIE93bCBIZWFkIEJ1dHRlcyByZXByZXNlbnRpbmcgdGhlIHVuc3Vic2l6ZWQgbmF0dXJhbCBwb3B1bGF0aW9uLiBDb21wYXJlZCBob21lIHJhbmdlIHNpemVzIG9mICpIZWxvZGVybWEgc3VzcGVjdHVtKiBiZXR3ZWVuIHR3byBwb3B1bGF0aW9ucy4gT25lIHJlcHJlc2VudGVkIGEgc3Vic2lkaXplZCBwb3B1bGF0aW9uIGF0IFN0b25lIENhbnlvbiBHb2xmIENsdWIgYW5kIHRoZSBvdGhlciBhdCBPd2wgSGVhZCBCdXR0ZXMgcmVwcmVzZW50aW5nIHRoZSB1bnN1YnNpZGl6ZWQgcG9wdWxhdGlvbi4gU3RvbmUgQ2FueW9uIGlzIGxvY2F0ZWQgaW4gT3JvIFZhbGxleSBvbiB0aGUgbm9ydGggZW5kIG9mIFR1Y3NvbiwgQXJpem9uYS4gIE93bCBIZWFkIEJ1dHRlcyBpcyBsb2NhdGVkIGFib3V0IDE3IGttIHN0cmFpZ2h0IGxpbmUgZGlzdGFuY2Ugbm9ydGggd2VzdCBmcm9tIFN0b25lIENhbnlvbi4gRGF0YSBhdCBPd2wgSGVhZCB3YXMgY29sbGVjdGVkIGZyb20gMjAwMCAtIDIwMDIsIHdoaWxlIGZpeGVzIHdlcmUgY29sbGVjdGVkIGZyb20gMjAwNyAtIDIwMTMgYXQgU3RvbmUgQ2FueW9uLiBXZSBDYWxjdWxhdGVkIG1pbmltdW0gY29udmV4IHBvbHlnb25zIHVzaW5nIGJvdGggOTUgcGVyY2VudCBhbmQgMTAwIHBlcmNlbnQgb2YgdGhlIGxvY2F0aW9ucyBmb3IgZWFjaCBsaXphcmQsIGFzIHdlbGwgYXMgOTUlIGFuZCA1MCUgS2VybmVsIERlbnNpdHkgRXN0aW1hdGlvbnMgKEtERSkuCgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldCgKCW1lc3NhZ2UgPSBGQUxTRSwKCXdhcm5pbmcgPSBGQUxTRSwKCWluY2x1ZGUgPSBGQUxTRQopCiMgTE9BRCBQQUNLQUdFUyAKCmxpYnJhcnkodGlkeXZlcnNlKSAKbGlicmFyeShrbml0cikgIyAgbWFrZSB0YWJsZXMKbGlicmFyeShsZWFmbGV0KQpsaWJyYXJ5KGFkZWhhYml0YXRIUikKbGlicmFyeShsbWU0KQpsaWJyYXJ5KGxtZXJUZXN0KQpsaWJyYXJ5KHJlYWRyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoZ2dmb3J0aWZ5KQpsaWJyYXJ5KG9yZGluYWwpCmxpYnJhcnkobHNtZWFucykKbGlicmFyeShnZ21hcCkKbGlicmFyeShnZ3NuKQpsaWJyYXJ5KG1hcHZpZXcpCiNrbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDEvMykgI2ZvcmNlIGZpZ3VyZXMgdG8gYmUgY2VydGFpbiBzaXplIGFuZCBhc3BlY3QgcmF0aW8KYGBgCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmdnbWFwOjpyZWdpc3Rlcl9nb29nbGUoa2V5ID0gIkFJemFTeUJqaGhFOXBlUkJtUzFoOVdZUXgxazVNRl9YQVhxVWZTcyIpCgpwMzwtIGdnbWFwKGdldF9nb29nbGVtYXAoY2VudGVyID0gYyhsb24gPSAtMTEwLjk5MDg4LCBsYXQgPSAzMi40Njg3OCksCiAgICAgICAgICAgICAgICAgICAgICAgICB6b29tID0gMTUsIHNjYWxlID0gMixtYXB0eXBlID0nc2F0ZWxsaXRlJyxhcmNoaXZpbmcgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAnY29sb3InKSkKIyBwMwoKTG9uZ2l0dWRlPC1jKC0xMTAuOTc4LC0xMTAuOTc4LC0xMTAuOTgwLC0xMTAuOTgzLC0xMTAuOTg1LC0xMTAuOTg4LC0xMTAuOTkwLC0xMTAuOTk0LC0xMTAuOTk1LAogICAgICAgICAgICAgLTExMC45OTcsLTExMS4wMDMsLTExMS4wMDQsLTExMS4wMDQyLC0xMTEuMDAwLC0xMTAuOTk1LC0xMTAuOTg1LC0xMTAuOTc4LC0xMTAuOTgwKQoKTGF0aXR1ZGU8LWMoMzIuNDYzLDMyLjQ2MiwzMi40NjIsMzIuNDYxLDMyLjQ2MSwzMi40NjAsMzIuNDYyLDMyLjQ2NCwzMi40NjYsMzIuNDY4LDMyLjQ2OCwKICAgICAgICAgICAgMzIuNDY5LDMyLjQ3MywzMi40NzMzLDMyLjQ3MiwzMi40NzQsMzIuNDcxLDMyLjQ2NykKIApteWNvb3JkZGF0YSA8LSBhcy5kYXRhLmZyYW1lKGNiaW5kKExvbmdpdHVkZSxMYXRpdHVkZSkpCgojIGdnbWFwKHAzKSsKcDMrZ2VvbV9wb2x5Z29uKGRhdGE9bXljb29yZGRhdGEsYWVzKHg9TG9uZ2l0dWRlLHk9TGF0aXR1ZGUpLGFscGhhPTAuMixjb2xvdXI9InJlZCIsCiAgICAgICAgICAgICAgICBmaWxsPSJyZWQiKStnZW9tX3BhdGgoZGF0YT1teWNvb3JkZGF0YSxhZXMoeD1Mb25naXR1ZGUseT1MYXRpdHVkZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyPSJ3aGl0ZSIsYWxwaGE9MC40LHNpemU9MikrCiAgYW5ub3RhdGUoInRleHQiLCB4PS0xMTAuOTg5LHk9MzIuNDY4LGxhYmVsPSJTdG9uZSBDYW55b24gQ2x1YiIsY29sb3VyPSJ3aGl0ZSIsc2l6ZT0zKSsKICBzY2FsZWJhcih4Lm1pbiA9IC0xMTEuMDA1LCB4Lm1heCA9IC0xMTAuOTc1LAogICAgICAgICAgIHkubWluID0gMzIuNDU1LCB5Lm1heCA9IDMyLjQ4MCwgYW5jaG9yID0gTlVMTCwKICAgICAgICAgICBkaXN0ID0gNTAsIHRyYW5zZm9ybT1UUlVFLGRpc3RfdW5pdD0ibSIsIG1vZGVsID0gJ1dHUzg0JykrCiAgbGFicyh0aXRsZSA9ICJTQ0dDIFN0dWR5IFNpdGUgT3JvIFZhbGxleSBBcml6b25hIikKCgojIGFubm90YXRlKCJwb2ludCIseD03LjI1Nzg4NSx5PTQ2Ljc5MDQ5LHNpemU9NykKIyBwICsgZ2VvbV9wb2ludChhZXMoeCA9IExvbmdpdHVkZSwgeSA9IExhdGl0dWRlLCAgY29sb3VyID0gSW5pdGlhbC5UeXBlLkdyb3VwKSwgZGF0YSA9IGkyLCBzaXplID0gMC41KSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikKYGBgCkZpZ3VyZSAxIHwgU3RvbmUgQ2FueW9uIEdvbGYgQ2x1YiwgbG9jYXRlZCBpbiBPcm8gVmFsbGV5LCBBcml6b25hIG9uIHRoZSBub3J0aGVybiBlZGdlIG9mIFR1Y3Nvbi4gICAgCgoKCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5TdW1tYXJ5IG9mIGhvbWUgcmFuZ2Ugc2l6ZS48L3NwYW4+CgpUYWJsZSAxIHwgUG9vbGVkIG92ZXJhbGwgaG9tZSByYW5nZXMgb2YgR2lsYSBNb25zdGVycyBhdCBPd2wgSGVhZCBCdXR0ZXMgYW5kIFN0b25lIENhbnlvbiBHb2xmIENsdWIuIEJvdGggMTAwJSBhbmQgOTUlIE1DUHMgd2VyZSBjYWxjdWxhdGVkIGJldHdlZW4gYm90aCBwb3B1bGF0aW9ucy4gCmBgYHtyIEhvbWUgcmFuZ2Ugc2l6ZXMgb2YgU3RvbmUgQ2FueW9uIGFuZCBPd2wgSGVhZCBCdXR0ZXMgYnkgeWVhci4sIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpHTV90YWJsZSA8LSByZWFkX2NzdigiR01fdGFibGUuY3N2IikKa2FibGUoR01fdGFibGUsZm9ybWF0PSJwYW5kb2MiLCBjYXB0aW9uPSdIb21lIHJhbmdlIHNpemVzIG9mIFN0b25lIENhbnlvbiBhbmQgT3dsIGhlYWQgQnV0dGVzIHVzaW5nIGJvdGggOTUgcGVyY2VudCBhbmQgMTAwIHBlcmNlbnQgTUNQcy4nKQpgYGAKCgoKCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5HaWxhIE1vbnN0ZXIgSG9tZSBSYW5nZSBTaXplcyBhdCBTdG9uZSBDYW55b24gdnMuIE93bCBIZWFkIEJ1dHRlcy48L3NwYW4+CgpgYGB7ciBTdG9uZSBDYW55b24gVnMuIE93bCBIZWFkIEJ1dHRlcywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KeWVhciA8LSByZWFkX2NzdigiR01fQ29uc29saWRhdGVkX0J5WWVhci5jc3YiKQoKIyBxdWljayBwbG90CkdyYXBoMTwtZ2dwbG90KHllYXIsYWVzKHg9TjEwMCx5PUhvbWVfUmFuZ2VfMTAwbWNwLGdyb3VwPUVudmlyb25tZW50KSkrCiAgZ2VvbV9wb2ludChhZXMoc2hhcGUgPSBmYWN0b3IoRW52aXJvbm1lbnQpKSwgc2l6ZSA9IDIpK2dlb21fc21vb3RoKG1ldGhvZD1sbSkrc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSBjKHN1YnNpZGl6ZWQ9ImN5YW4zIixub25zdWJzaWRpemVkPSJpbmRpYW5yZWQxIikpK2xhYnModGl0bGUgPSAiMTAwJSBNQ1AgSG9tZSBSYW5nZXMiKSsKICB4bGFiKCJOdW1iZXIgb2YgUmVsb2NhdGlvbnMiKSt5bGFiKCJBcmVhIChoYSkgdXNpbmcgMTAwJSBNQ1AiKSsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLHNlPUZBTFNFKSsKICB0aGVtZV9idygpCgpHcmFwaDE8LUdyYXBoMSt0aGVtZShheGlzLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplID0gMTQpKQoKIyBsZWdlbmQgYXQgdG9wLWxlZnQsIGluc2lkZSB0aGUgcGxvdApHcmFwaDEgKyB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgIGxlZ2VuZC5qdXN0aWZpY2F0aW9uPWMoMCwxKSwKICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC4wNSwgMC45NSksCiAgICAgICAgICAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpCiMgZGlyLmNyZWF0ZSgib3V0cHV0cyIpICMgY3JlYXRlIGEgbmV3IGZvbGRlciB0byBob2xkIHRoZSBvdXRwdXQgZmlsZXMKIyBnZ3NhdmUoIm91dHB1dHMvU0NfT0hCX3Bsb3QucGRmIikKYGBgCkZpZ3VyZSAxIHwgTm9uLVN1YnNpZGl6ZWQgKE93bCBIZWFkIEJ1dHRlcykgdnMuIFN1YnNpZGl6ZWQgKFN0b25lIENhbnlvbikgcG9wdWxhdGlvbiAxMDAlIE1DUHMgYnkgbnVtYmVyIG9mIGZpeGVzIGFjcm9zcyB0aGUgd2hvbGUgc3R1ZHkgaW50ZXJ2YWwuCgoKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgClRhYmxlIDIgfCBHcm91cCAxMDAlIE1DUCBob21lIHJhbmdlIG1lYW5zIG9mIHJhdyBkYXRhIG9mIFN0b25lIENhbnlvbiBhbmQgT3dsIEhlYWQgQnV0dGVzLiBHcm91cGVkIGJ5IGVudmlyb25tZW50IGFuZCBzZXguCmBgYHtyIFRhYmxlIDIuIEdyb3VwIE1lYW5zLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KIyBZUl9HUlBfTWVhbnMgPC0geWVhciAlPiUgCiMgICAgICAgICBncm91cF9ieShFbnZpcm9ubWVudCxTZXgpICU+JSAKIyAgICAgICAgIHN1bW1hcmlzZShIb21lX1JhbmdlXzEwMG1jcCA9IG1lYW4oSG9tZV9SYW5nZV8xMDBtY3ApKQojIFlSX0dSUF9NZWFucwoKbGlicmFyeShSbWlzYykKWVJfR1JQX01lYW5zIDwtIHN1bW1hcnlTRSh5ZWFyLCBtZWFzdXJldmFyPSJIb21lX1JhbmdlXzEwMG1jcCIsIGdyb3VwdmFycz1jKCJFbnZpcm9ubWVudCIsIlNleCIpKQoKa2FibGUoWVJfR1JQX01lYW5zLCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdHcm91cCBNZWFucyBvZiBPdmVyYWxsIEhvbWUgUmFuZ2VzIGF0IFN0b25lIENhbnlvbiBhbmQgT3dsIEhlYWQgQnV0dGVzJykKYGBgCgoKVGFibGUgMyB8IEdyb3VwIDk1JSBNQ1AgaG9tZSByYW5nZSBtZWFucyBvZiByYXcgZGF0YSBvZiBTdG9uZSBDYW55b24gYW5kIE93bCBIZWFkIEJ1dHRlcy4gR3JvdXBlZCBieSBlbnZpcm9ubWVudCBhbmQgc2V4LgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KWVJfR1JQX01lYW5zOTUgPC0gc3VtbWFyeVNFKHllYXIsIG1lYXN1cmV2YXI9IkhvbWVfUmFuZ2VfOTVtY3AiLCBncm91cHZhcnM9YygiRW52aXJvbm1lbnQiLCJTZXgiKSxuYS5ybSA9IFRSVUUpCgprYWJsZShZUl9HUlBfTWVhbnM5NSwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnR3JvdXAgTWVhbnMgb2YgT3ZlcmFsbCA5NSUgTUNQIEhvbWUgUmFuZ2VzIGF0IFN0b25lIENhbnlvbiBhbmQgT3dsIEhlYWQgQnV0dGVzJykKYGBgCgoKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGRfUk0gPC0gcG9zaXRpb25fZG9kZ2UoMC4xKQoKUmF3LlllYXJIUjwtZ2dwbG90KFlSX0dSUF9NZWFucywgYWVzKHg9U2V4LHk9SG9tZV9SYW5nZV8xMDBtY3AsZ3JvdXA9RW52aXJvbm1lbnQpKStnZW9tX3BvaW50KGFlcyhzaGFwZSA9IGZhY3RvcihFbnZpcm9ubWVudCkpLCBzaXplID0gMixwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSguMSkpK2dlb21fZXJyb3JiYXIoYWVzKHltaW49SG9tZV9SYW5nZV8xMDBtY3Atc2UsIHltYXg9SG9tZV9SYW5nZV8xMDBtY3Arc2UpLCB3aWR0aD0uMSxwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpKStnZ3RpdGxlKCJPdmVyYWxsIEhvbWUgUmFuZ2VzIGJ5IFNleCBhbmQgUG9wdWxhdGlvbiAoMTAwJSBNQ1ApIikreGxhYigiU2V4IikreWxhYigiQXJlYSAoaGEpIikrCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgY29sb3I9ImJsYWNrIiwgc2l6ZT0xNCwgZmFjZT0iYm9sZCIpKQoKUmF3LlllYXJIUiArIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmp1c3RpZmljYXRpb249YygwLDEpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb249YygwLjA1LCAwLjk1KSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5rZXkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSkKYGBgCkZpZ3VyZSAzIHwgUmF3IG92ZXJhbGwgbWVhbiBob21lIHJhbmdlcyBiZXR3ZWVuIGVudmlyb25tZW50IGFuZCBzZXguIE5vdGUsIHRoYXQgYmVmb3JlIGFkanVzdGVkIGhvbWUgcmFuZ2VzLCBtYWxlcyBleGhpYml0IHNtYWxsZXIgb3ZlcmFsbCBob21lIHJhbmdlcyBhdCBTdG9uZSBDYW55b24sIHRoYW4gbWFsZXMgb2YgT3dsIEhlYWQgQnV0dGVzLgoKCgoKCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5HaWxhIE1vbnN0ZXIgWWVhcmx5IEhvbWUgUmFuZ2UgU2hpZnRzIG9mIDEwMCUgTUNQcy48L3NwYW4+CgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQoKbWNwX2FuYWx5c2lzLlBPTFkgPC0gZnVuY3Rpb24oZmlsZW5hbWUsIHBlcmNlbnRhZ2UpewogIGRhdGEgPC0gcmVhZC5jc3YoZmlsZSA9IGZpbGVuYW1lLHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKICBkYXRhLnNwIDwtIGRhdGFbLCBjKCJMSVpBUkROVU1CRVIiLCAiRUFTVElORyIsICJOT1JUSElORyIpXQogIGNvb3JkaW5hdGVzKGRhdGEuc3ApIDwtIGMoIkVBU1RJTkciLCAiTk9SVEhJTkciKQogIHByb2o0c3RyaW5nKGRhdGEuc3ApIDwtIENSUy5TQwogIG1jcF9vdXQgPC0gbWNwKGRhdGEuc3AsIHBlcmNlbnRhZ2UsIHVub3V0PSJoYSIpCn0KCk0yMTVfbWNwLjExPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMjE1LzIwMTEgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTIxNV9tY3AuMTI8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00yMTUvMjAxMiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTA0X21jcC4wODwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEwNC8yMDA4IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMDRfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTA0LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuMDg8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvMjAwOCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuMTE8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvMjAxMSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC4xMjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC8yMDEyIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEzN19tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMzcvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC4xMTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy8yMDExIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLjA5PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvMjAxMCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTQ3X21jcC4xMTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny8yMDExIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLjEyPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3LzIwMTIgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC4wODwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjM2LzIwMDggLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjM2LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjM2LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC4xMTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjM2LzIwMTEgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC4xMjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjM2LzIwMTIgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjY2X21jcC4wODwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjY2LzIwMDggLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjY2X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjY2LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjY2X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjY2LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9tY3AuMDg8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTkvMjAwOCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTE5X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExOS8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTE5LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9tY3AuMDc8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTIvMjAwNyAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTEyX21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExMi8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTJfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTEyLzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTY5X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTY5LzIwMDkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTY5X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTY5LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCiMjIEZvcnRpZnkgbWNwIHBvbHlnb25zIGZvciBnZ3Bsb3QyICpZRUFSKjoKRjEwNF9tY3AuMDhUIDwtIGZvcnRpZnkoRjEwNF9tY3AuMDgsIHJlZ2lvbiA9ICJpZCIpCkYxMDRfbWNwLjA5VCA8LSBmb3J0aWZ5KEYxMDRfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpGMTE0X21jcC4wOFQgPC0gZm9ydGlmeShGMTE0X21jcC4wOCwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuMDlUIDwtIGZvcnRpZnkoRjExNF9tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLjEwVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpGMTE0X21jcC4xMVQgPC0gZm9ydGlmeShGMTE0X21jcC4xMSwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuMTJUIDwtIGZvcnRpZnkoRjExNF9tY3AuMTIsIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLjA5VCA8LSBmb3J0aWZ5KEYxMzdfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpGMTM3X21jcC4xMFQgPC0gZm9ydGlmeShGMTM3X21jcC4xMCwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuMTFUIDwtIGZvcnRpZnkoRjEzN19tY3AuMTEsIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLjA5VCA8LSBmb3J0aWZ5KEYxNDdfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpGMTQ3X21jcC4xMFQgPC0gZm9ydGlmeShGMTQ3X21jcC4xMCwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuMTFUIDwtIGZvcnRpZnkoRjE0N19tY3AuMTEsIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLjEyVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLjEyLCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLjA4VCA8LSBmb3J0aWZ5KEYzNl9tY3AuMDgsIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuMDlUIDwtIGZvcnRpZnkoRjM2X21jcC4wOSwgcmVnaW9uID0gImlkIikKRjM2X21jcC4xMFQgPC0gZm9ydGlmeShGMzZfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLjExVCA8LSBmb3J0aWZ5KEYzNl9tY3AuMTEsIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuMTJUIDwtIGZvcnRpZnkoRjM2X21jcC4xMiwgcmVnaW9uID0gImlkIikKRjY2X21jcC4wOFQgPC0gZm9ydGlmeShGNjZfbWNwLjA4LCByZWdpb24gPSAiaWQiKQpGNjZfbWNwLjA5VCA8LSBmb3J0aWZ5KEY2Nl9tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCkY2Nl9tY3AuMTBUIDwtIGZvcnRpZnkoRjY2X21jcC4xMCwgcmVnaW9uID0gImlkIikKTTExOV9tY3AuMDhUIDwtIGZvcnRpZnkoTTExOV9tY3AuMDgsIHJlZ2lvbiA9ICJpZCIpCk0xMTlfbWNwLjA5VCA8LSBmb3J0aWZ5KE0xMTlfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpNMTE5X21jcC4xMFQgPC0gZm9ydGlmeShNMTE5X21jcC4xMCwgcmVnaW9uID0gImlkIikKTTExMl9tY3AuMDdUIDwtIGZvcnRpZnkoTTExMl9tY3AuMDcsIHJlZ2lvbiA9ICJpZCIpCk0xMTJfbWNwLjA5VCA8LSBmb3J0aWZ5KE0xMTJfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpNMTEyX21jcC4xMFQgPC0gZm9ydGlmeShNMTEyX21jcC4xMCwgcmVnaW9uID0gImlkIikKTTY5X21jcC4wOVQgPC0gZm9ydGlmeShNNjlfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpNNjlfbWNwLjEwVCA8LSBmb3J0aWZ5KE02OV9tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCk0yMTVfbWNwLjExVCA8LSBmb3J0aWZ5KE0yMTVfbWNwLjExLCByZWdpb24gPSAiaWQiKQpNMjE1X21jcC4xMlQgPC0gZm9ydGlmeShNMjE1X21jcC4xMiwgcmVnaW9uID0gImlkIikKCgptY3Auc2hpZnQuVEVTVDQgPC0gZ2dwbG90KCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMDRfbWNwLjA4VCwgYWVzKHg9RjEwNF9tY3AuMDhUJGxvbmcsIHk9RjEwNF9tY3AuMDhUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEwNF9tY3AuMDlULCBhZXMoeD1GMTA0X21jcC4wOVQkbG9uZywgeT1GMTA0X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC4wOFQsIGFlcyh4PUYxMTRfbWNwLjA4VCRsb25nLCB5PUYxMTRfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLjA5VCwgYWVzKHg9RjExNF9tY3AuMDlUJGxvbmcsIHk9RjExNF9tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuMTBULCBhZXMoeD1GMTE0X21jcC4xMFQkbG9uZywgeT1GMTE0X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC4xMVQsIGFlcyh4PUYxMTRfbWNwLjExVCRsb25nLCB5PUYxMTRfbWNwLjExVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLjEyVCwgYWVzKHg9RjExNF9tY3AuMTJUJGxvbmcsIHk9RjExNF9tY3AuMTJUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuMDlULCBhZXMoeD1GMTM3X21jcC4wOVQkbG9uZywgeT1GMTM3X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTM3X21jcC4xMFQsIGFlcyh4PUYxMzdfbWNwLjEwVCRsb25nLCB5PUYxMzdfbWNwLjEwVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMzdfbWNwLjExVCwgYWVzKHg9RjEzN19tY3AuMTFUJGxvbmcsIHk9RjEzN19tY3AuMTFUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuMDlULCBhZXMoeD1GMTQ3X21jcC4wOVQkbG9uZywgeT1GMTQ3X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0xKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuMTBULCBhZXMoeD1GMTQ3X21jcC4xMFQkbG9uZywgeT1GMTQ3X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0xKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuMTFULCBhZXMoeD1GMTQ3X21jcC4xMVQkbG9uZywgeT1GMTQ3X21jcC4xMVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0xKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuMTJULCBhZXMoeD1GMTQ3X21jcC4xMlQkbG9uZywgeT1GMTQ3X21jcC4xMlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0xKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC4wOFQsIGFlcyh4PUYzNl9tY3AuMDhUJGxvbmcsIHk9RjM2X21jcC4wOFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTYpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLjA5VCwgYWVzKHg9RjM2X21jcC4wOVQkbG9uZywgeT1GMzZfbWNwLjA5VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NikgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuMTBULCBhZXMoeD1GMzZfbWNwLjEwVCRsb25nLCB5PUYzNl9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT02KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC4xMVQsIGFlcyh4PUYzNl9tY3AuMTFUJGxvbmcsIHk9RjM2X21jcC4xMVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTYpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLjEyVCwgYWVzKHg9RjM2X21jcC4xMlQkbG9uZywgeT1GMzZfbWNwLjEyVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NikgKwogIGdlb21fcG9seWdvbihkYXRhPUY2Nl9tY3AuMDhULCBhZXMoeD1GNjZfbWNwLjA4VCRsb25nLCB5PUY2Nl9tY3AuMDhUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0xKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC4wOVQsIGFlcyh4PUY2Nl9tY3AuMDlUJGxvbmcsIHk9RjY2X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTEpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GNjZfbWNwLjEwVCwgYWVzKHg9RjY2X21jcC4xMFQkbG9uZywgeT1GNjZfbWNwLjEwVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPU0xMTlfbWNwLjA4VCwgYWVzKHg9TTExOV9tY3AuMDhUJGxvbmcsIHk9TTExOV9tY3AuMDhUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1NMTE5X21jcC4wOVQsIGFlcyh4PU0xMTlfbWNwLjA5VCRsb25nLCB5PU0xMTlfbWNwLjA5VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9TTExOV9tY3AuMTBULCBhZXMoeD1NMTE5X21jcC4xMFQkbG9uZywgeT1NMTE5X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPU0xMTJfbWNwLjA3VCwgYWVzKHg9TTExMl9tY3AuMDdUJGxvbmcsIHk9TTExMl9tY3AuMDdUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1NMTEyX21jcC4wOVQsIGFlcyh4PU0xMTJfbWNwLjA5VCRsb25nLCB5PU0xMTJfbWNwLjA5VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9TTExMl9tY3AuMTBULCBhZXMoeD1NMTEyX21jcC4xMFQkbG9uZywgeT1NMTEyX21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MykgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9TTY5X21jcC4wOVQsIGFlcyh4PU02OV9tY3AuMDlUJGxvbmcsIHk9TTY5X21jcC4wOVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIpICsKICAjIGdlb21fcG9seWdvbihkYXRhPU02OV9tY3AuMTBULCBhZXMoeD1NNjlfbWNwLjEwVCRsb25nLCB5PU02OV9tY3AuMTBUJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siKSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1NMjE1X21jcC4xMVQsIGFlcyh4PU0yMTVfbWNwLjExVCRsb25nLCB5PU0yMTVfbWNwLjExVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIikgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9TTIxNV9tY3AuMTJULCBhZXMoeD1NMjE1X21jcC4xMlQkbG9uZywgeT1NMjE1X21jcC4xMlQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIpICsKICB0aGVtZV9idygpICtsYWJzKHg9IkVhc3RpbmcgKG0pIiwgeT0iTm9ydGhpbmcgKG0pIix0aXRsZT0iWWVhcmx5IEhvbWUgUmFuZ2UgU2hpZnRzIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIsIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgaGp1c3QgPSAwLjUpKQoKbWNwLnNoaWZ0LlRFU1Q0CmBgYApGaWd1cmUgNCB8IFllYXJseSBob21lIHJhbmdlIHNoaWZ0cyBvZiBzdWItc2FtcGxlZCBob21lIHJhbmdlcyBvZiA4IGxpemFyZHMsIGJvdGggbWFsZXMgYW5kIGZlbWFsZXMuIEhvbWUgcmFuZ2Ugc2hpZnRzIGFwcGVhciB0byBiZSByZWxhdGl2bGV5IHN0YWJsZSBvdmVyIHN0dWR5IHllYXJzLgoKCiAKPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPlJlcGVhdGVkIG1lYXN1cmVzIEFOT1ZBIGZvciBZZWFybHkgSG9tZSBSYW5nZXMgYnkgU2V4Ljwvc3Bhbj4KClJlcGVhdGVkIE1lYXN1cmUgQU5PVkEgZm9yIDEwMCUgTUNQIG92ZXJhbGwgaG9tZSByYW5nZXMKYGBge3IgUmVwZWF0ZWQgTWVhc3VyZXMgQU5PVkEgWUVBUiwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMgR2V0IHAtdmFsdWVzIGZyb20gbWl4ZWQgbW9kZWwgRiB2YWx1ZXM6CmxpYnJhcnkobG1lNCkKbGlicmFyeShyZWFkcikKeWVhciA8LSByZWFkX2NzdigiR01fQ29uc29saWRhdGVkX0J5WWVhci5jc3YiKQoKUk1tb2QueWVhcjwtbG1lcihIb21lX1JhbmdlXzEwMG1jcH5FbnZpcm9ubWVudCtZZWFyK1NleCtOMTAwK0Vudmlyb25tZW50KlNleCsKICAgICAgICAgICAgICAgICAgICgxfEdpbGEpLGRhdGEgPSB5ZWFyKQpzdW1tYXJ5KFJNbW9kLnllYXIpCmBgYAoKQU5PVkEgVGFibGU6IDEwMCUgTUNQCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmFub3ZhKFJNbW9kLnllYXIpCmBgYAoKClJlcGVhdGVkIE1lYXN1cmUgQU5PVkEgZm9yIDk1JSBNQ1Agb3ZlcmFsbCBob21lIHJhbmdlcwpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KUk1tb2QueWVhcjk1PC1sbWVyKEhvbWVfUmFuZ2VfOTVtY3B+RW52aXJvbm1lbnQrWWVhcitTZXgrTjEwMCtFbnZpcm9ubWVudCpTZXgrCiAgICAgICAgICAgICAgICAgICAoMXxHaWxhKSxkYXRhID0geWVhcikKc3VtbWFyeShSTW1vZC55ZWFyOTUpCmBgYAoKCkFOT1ZBIFRhYmxlOiA5NSUgTUNQCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQphbm92YShSTW1vZC55ZWFyOTUpCmBgYAoKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJNbW9kLnllYXIxMDA8LWxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrWWVhcitTZXgrTjEwMCtFbnZpcm9ubWVudCpTZXgrKDF8R2lsYSksZGF0YSA9IHllYXIpCgpSTS5tYXJnaW5hbCA8LSBsc21lYW5zKFJNbW9kLnllYXIxMDAsIAogICAgICAgICAgICAgICAgICAgIH4gRW52aXJvbm1lbnQpCiMgUk0ubWFyZ2luYWwKCiMjIENBVEFHT1JJWkUgTFNNIEdSQVBIIEJZIFNFWCBCRVRXRUVOIEVOVklST05NRU5UOgpyZWZSTV9zZXggPC0gbHNtZWFucyhSTW1vZC55ZWFyMTAwLCBzcGVjcyA9IGMoIkVudmlyb25tZW50IiwiU2V4IikpCgojIHJlZlJNX3NleApyZWZfZGZSTV9zZXggPC0gYXMuZGF0YS5mcmFtZShzdW1tYXJ5KHJlZlJNX3NleCkpCnBkX1JNIDwtIHBvc2l0aW9uX2RvZGdlKDAuMSkKCkxTTS5ZZWFySFI8LWdncGxvdChyZWZfZGZSTV9zZXgsIGFlcyh4PVNleCx5PWxzbWVhbixncm91cD1FbnZpcm9ubWVudCkpK2dlb21fcG9pbnQoYWVzKHNoYXBlID0gZmFjdG9yKEVudmlyb25tZW50KSksIHNpemUgPSAyLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC4xKSkrZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1sc21lYW4tU0UsIHltYXg9bHNtZWFuK1NFKSwgd2lkdGg9LjEscG9zaXRpb249cG9zaXRpb25fZG9kZ2UoKSkrZ2d0aXRsZSgiQWRqdXN0ZWQgSG9tZSBSYW5nZXMgYnkgU2V4IGFuZCBQb3B1bGF0aW9uICgxMDAlIE1DUCkiKSt4bGFiKCJTZXgiKSt5bGFiKCJBcmVhIChoYSkiKSsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBjb2xvcj0iYmxhY2siLCBzaXplPTE0LCBmYWNlPSJib2xkIikpCgpMU00uWWVhckhSICsgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuanVzdGlmaWNhdGlvbj1jKDAsMSksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbj1jKDAuMDUsIDAuOTUpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmtleSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpKQpgYGAKRmlndXJlIDUgfCBBZGp1c3RlZCBob21lIHJhbmdlcyBiZXR3ZWVuIHNleGVzIG9mIG5vbi1zdWJzaWRpemVkIGFuZCBzdWJzaWRpemVkIHBvcHVsYXRpb25zLiBBZGp1c3RlZCBmb3IgZW52aXJvbm1lbnQsIHllYXIsIHNleCwgYW5kIHNhbXBsZSBzaXplLiAKIAoKCgoKVGFibGUgMy4gRGlyZWN0aW9uYWwgbWVhbnMgb2YgaG9tZSByYW5nZSBhZnRlciBiZWluZyBhZGp1c3RlZCBmb3IgeWVhciwgc2V4IGFuZCBzYW1wbGUgc2l6ZS4KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmthYmxlKHJlZl9kZlJNX3NleCwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnQWRqdXN0ZWQgR3JvdXAgTWVhbnMgb2YgT3ZlcmFsbCBIb21lIFJhbmdlcyBhdCBTdG9uZSBDYW55b24gYW5kIE93bCBIZWFkIEJ1dHRlcycpCmBgYAoKCgpQb3N0LUhvYyBjb21wYXJpc29ucyBiZXR3ZWVuIHNleGVzIGFuZCBlbnZpcm9ubWVudDoKYGBge3IgQ29tcHMgZm9yIFNleCwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJNbW9kLnllYXIuRW08LWxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrWWVhcitTZXgrTjEwMCtFbnZpcm9ubWVudCpTZXgrCiAgICAgICAgICAgICAgICAgICAgICAoMXxHaWxhKSxkYXRhID0geWVhcikKCiMgU2V4LmVtbS5vYSA8LSBlbW1lYW5zKFJNbW9kLnllYXIuRW0sIGMoIkVudmlyb25tZW50IiwiU2V4IikpCiMgcGFpcnMoU2V4LmVtbS5vYSkKCmVtbV9zLnQyIDwtIGVtbWVhbnMoUk1tb2QueWVhci5FbSwgcGFpcndpc2UgfiBTZXggfCBFbnZpcm9ubWVudCkKZW1tX3MudDIKYGBgCgoKCkdyYXBoaWNhbCBDb21wYXJpc29ucyBvZiBTZXggV2l0aGluIEVhY2ggRW52aXJvbm1lbnQ6CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpwbG90KGVtbV9zLnQyLCBjb21wYXJpc29ucyA9IFRSVUUsIHhsYWIgPSAiTWVhbiBIb21lIFJhbmdlIiwgeWxhYiA9ICJTZXgiKQojIHBsb3QoU2Vhcy5NZWFuc1QsIGNvbXBhcmlzb25zID0gVFJVRSkKCmBgYApGaWd1cmUgNiB8IFBhaXJ3aXNlIGNvbXBhcmlzb25zIG9mIGhvbWUgcmFuZ2UgYmV0d2VlbiBzZXhlcyB3aXRoaW4gZWFjaCBlbnZpcm9ubWVudC4gSWYgcmVkIGFycm93cyBvdmVybGFwIHRob3NlIG9mIG90aGVycywgdGhlbiAgdGhlcmUgaXMgbm8gc2lnbmlmaWNhbnQgc3RhdGlzdGljYWwgZGlmZmVyZW5jZS4gCgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KZW1tX3MudDMgPC0gZW1tZWFucyhSTW1vZC55ZWFyLkVtLCBwYWlyd2lzZSB+IEVudmlyb25tZW50IHwgU2V4KQplbW1fcy50MwpgYGAKCgoKR3JhcGhpY2FsIENvbXBhcmlzb25zIG9mIFNleCBiZXR3ZWVuIHRoZSB0d28gcG9wdWxhdGlvbnM6CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpwbG90KGVtbV9zLnQzLCBjb21wYXJpc29ucyA9IFRSVUUsIHhsYWIgPSAiTWVhbiBIb21lIFJhbmdlIiwgeWxhYiA9ICJTZXgiKQpgYGAKRmlndXJlIDcgfCBQYWl3aXNlIGNvbXBhcmlzb25zIG9mIHNleCBiZXR3ZWVuIGVudmlyb25tZW50cy4gSWYgcmVkIGFycm93cyBvdmVybGFwIHRob3NlIG9mIG90aGVycywgdGhlbiAgdGhlcmUgaXMgbm8gc2lnbmlmaWNhbnQgc3RhdGlzdGljYWwgZGlmZmVyZW5jZS4gCgoKCgoKPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPlNlYXNvbmFsIEhvbWUgUmFuZ2UuPC9zcGFuPgoKCkhvbWUgcmFuZ2UgYW5hbHlzaXMgYnJva2VuIGRvd24gYnkgZml2ZSBzZWFzb25zOyBFbWVyZ2VuY2UsIERyeSwgTW9uc29vbiwgUG9zdCBNb25zb29uLiBUaGUgc3RhcnQgb2YgZW1lcmdlbmNlIHdhcyBkZWZpbmVkIGJ5IHdoZW4gbW92ZW1lbnQgcGF0dGVybnMgaW5jcmVhc2VkIGZyb20gbm9uZS9taW5pbWFsIHRvIHRoZSBzdGFydCBvZiBoaWdoIGFjdGl2aXR5LiBFZmZvcnQgd2FzIHRha2VuIHRvIG1hdGNoIGFzIGNsb3NlbHkgYXMgcG9zc2libGUgdG8gdGhlIE93bCBIZWFkIEJ1dHRlcyBlbWVyZ2VuY2UgZGF0ZSBpbnRlcnZhbC4gTW9uc29vbiBzZWFzb24gd2FzIGFkanVzdGVkIHVzaW5nIE5PQUEgY2xpbWF0ZSBkYXRhLiBUaGUgc3RhcnQgb2Ygd2FzIGRlZmluZWQgd2hlbiB0aGUgbWVhbiBkZXcgcG9pbnQgdGVtcGVyYXR1cmVzIG9mIHRocmVlIGNvbnNlY3V0aXZlIGRheXMgd2VyZSBncmVhdGVyIHRoYW4gNTUgZGVncmVlcy4gCgpTY2FsaW5nIGhvbWUgcmFuZ2UgYW5hbHlzZXMgYnkgc2Vhc29uYWwgZXN0aW1hdGVzIHJlZHVjZXMgdGhlIG51bWJlciBvciBsb2NhdGlvbnMgZm9yIGVhY2ggbGl6YXJkLiAxMDAlIE1DUHMgd2VyZSB1c2VkIGZvciBzZWFzb25hbCBob21lIHJhbmdlIGFuYWx5c2VzIHRvIGF2b2lkIGFueSBmdXJ0aGVyIHJlZHVjdGlvbiBvZiBsb2NhdGlvbnMgZm9yIGVhY2ggZXN0aW1hdGlvbi4KCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyMgQ3JlYXRlIE1DUCBwb2x5Z29ucyBieSBTRUFTT046Ck0yMTVfbWNwLkVNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMjE1L0VtZXJnZW5jZSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMjE1X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00yMTUvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0yMTVfbWNwLk1PTjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTIxNS9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpNMTEyX21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTIvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTJfbWNwLk1PTjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExMi9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTJfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTEyL1Bvc3RfTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKTTExOV9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTE5L0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTE5X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTkvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTE5X21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExOS9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCkYxMTRfbWNwLkVNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0L0VtZXJnZW5jZSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLk1PTjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0L1Bvc3RfTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKRjEzN19tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMzcvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEzN19tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3L01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEzN19tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMzcvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGMTQ3X21jcC5FTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3L0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTQ3X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTQ3X21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCkYyNTJfbWNwLkVNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMjUyL0VtZXJnZW5jZSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMjUyX21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YyNTIvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYyNTJfbWNwLk1PTjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjI1Mi9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYyNTJfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMjUyL1Bvc3RfTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKRjM2X21jcC5FTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjM2L0VtZXJnZW5jZSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMzZfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjM2L0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMzZfbWNwLk1PTjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjM2L01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjM2X21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjM2L1Bvc3RfTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKRjY2X21jcC5FTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjY2L0VtZXJnZW5jZSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGNjZfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjY2L0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGNjZfbWNwLk1PTjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjY2L01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjY2X21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjY2L1Bvc3RfTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKIyMgRm9ydGlmeSBtY3AgcG9seWdvbnMgZm9yIGdncGxvdDIgKlNFQVNPTio6Ck0yMTVfbWNwLkVNVCA8LSBmb3J0aWZ5KE0yMTVfbWNwLkVNLCByZWdpb24gPSAiaWQiKQpNMjE1X21jcC5EUllUIDwtIGZvcnRpZnkoTTIxNV9tY3AuRFJZLCByZWdpb24gPSAiaWQiKQpNMjE1X21jcC5NT05UIDwtIGZvcnRpZnkoTTIxNV9tY3AuTU9OLCByZWdpb24gPSAiaWQiKQoKTTExMl9tY3AuRFJZVCA8LSBmb3J0aWZ5KE0xMTJfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKTTExMl9tY3AuTU9OVCA8LSBmb3J0aWZ5KE0xMTJfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKTTExMl9tY3AuUE1UIDwtIGZvcnRpZnkoTTExMl9tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpNMTE5X21jcC5EUllUIDwtIGZvcnRpZnkoTTExOV9tY3AuRFJZLCByZWdpb24gPSAiaWQiKQpNMTE5X21jcC5NT05UIDwtIGZvcnRpZnkoTTExOV9tY3AuTU9OLCByZWdpb24gPSAiaWQiKQpNMTE5X21jcC5QTVQgPC0gZm9ydGlmeShNMTE5X21jcC5QTSwgcmVnaW9uID0gImlkIikKCkYxMTRfbWNwLkVNVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLkVNLCByZWdpb24gPSAiaWQiKQpGMTE0X21jcC5EUllUIDwtIGZvcnRpZnkoRjExNF9tY3AuRFJZLCByZWdpb24gPSAiaWQiKQpGMTE0X21jcC5NT05UIDwtIGZvcnRpZnkoRjExNF9tY3AuTU9OLCByZWdpb24gPSAiaWQiKQpGMTE0X21jcC5QTVQgPC0gZm9ydGlmeShGMTE0X21jcC5QTSwgcmVnaW9uID0gImlkIikKCkYxMzdfbWNwLkVNVCA8LSBmb3J0aWZ5KEYxMzdfbWNwLkVNLCByZWdpb24gPSAiaWQiKQpGMTM3X21jcC5EUllUIDwtIGZvcnRpZnkoRjEzN19tY3AuRFJZLCByZWdpb24gPSAiaWQiKQpGMTM3X21jcC5NT05UIDwtIGZvcnRpZnkoRjEzN19tY3AuTU9OLCByZWdpb24gPSAiaWQiKQpGMTM3X21jcC5QTVQgPC0gZm9ydGlmeShGMTM3X21jcC5QTSwgcmVnaW9uID0gImlkIikKCkYxNDdfbWNwLkVNVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLkVNLCByZWdpb24gPSAiaWQiKQpGMTQ3X21jcC5EUllUIDwtIGZvcnRpZnkoRjE0N19tY3AuRFJZLCByZWdpb24gPSAiaWQiKQpGMTQ3X21jcC5NT05UIDwtIGZvcnRpZnkoRjE0N19tY3AuTU9OLCByZWdpb24gPSAiaWQiKQpGMTQ3X21jcC5QTVQgPC0gZm9ydGlmeShGMTQ3X21jcC5QTSwgcmVnaW9uID0gImlkIikKCkYyNTJfbWNwLkVNVCA8LSBmb3J0aWZ5KEYyNTJfbWNwLkVNLCByZWdpb24gPSAiaWQiKQpGMjUyX21jcC5EUllUIDwtIGZvcnRpZnkoRjI1Ml9tY3AuRFJZLCByZWdpb24gPSAiaWQiKQpGMjUyX21jcC5NT05UIDwtIGZvcnRpZnkoRjI1Ml9tY3AuTU9OLCByZWdpb24gPSAiaWQiKQpGMjUyX21jcC5QTVQgPC0gZm9ydGlmeShGMjUyX21jcC5QTSwgcmVnaW9uID0gImlkIikKCkYzNl9tY3AuRU1UIDwtIGZvcnRpZnkoRjM2X21jcC5FTSwgcmVnaW9uID0gImlkIikKRjM2X21jcC5EUllUIDwtIGZvcnRpZnkoRjM2X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuTU9OVCA8LSBmb3J0aWZ5KEYzNl9tY3AuTU9OLCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLlBNVCA8LSBmb3J0aWZ5KEYzNl9tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgpGNjZfbWNwLkVNVCA8LSBmb3J0aWZ5KEY2Nl9tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkY2Nl9tY3AuRFJZVCA8LSBmb3J0aWZ5KEY2Nl9tY3AuRFJZLCByZWdpb24gPSAiaWQiKQpGNjZfbWNwLk1PTlQgPC0gZm9ydGlmeShGNjZfbWNwLk1PTiwgcmVnaW9uID0gImlkIikKRjY2X21jcC5QTVQgPC0gZm9ydGlmeShGNjZfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKbWNwLnNoaWZ0LlRFU1Q1IDwtIGdncGxvdCgpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC5FTVQsIGFlcyh4PUYxMTRfbWNwLkVNVCRsb25nLCB5PUYxMTRfbWNwLkVNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuRFJZVCwgYWVzKHg9RjExNF9tY3AuRFJZVCRsb25nLCB5PUYxMTRfbWNwLkRSWVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuTU9OVCwgYWVzKHg9RjExNF9tY3AuTU9OVCRsb25nLCB5PUYxMTRfbWNwLk1PTlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iZ3JlZW4iLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC5QTVQsIGFlcyh4PUYxMTRfbWNwLlBNVCRsb25nLCB5PUYxMTRfbWNwLlBNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMzdfbWNwLkVNVCwgYWVzKHg9RjEzN19tY3AuRU1UJGxvbmcsIHk9RjEzN19tY3AuRU1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTM3X21jcC5EUllULCBhZXMoeD1GMTM3X21jcC5EUllUJGxvbmcsIHk9RjEzN19tY3AuRFJZVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJyZWQiLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTM3X21jcC5NT05ULCBhZXMoeD1GMTM3X21jcC5NT05UJGxvbmcsIHk9RjEzN19tY3AuTU9OVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJncmVlbiIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMzdfbWNwLlBNVCwgYWVzKHg9RjEzN19tY3AuUE1UJGxvbmcsIHk9RjEzN19tY3AuUE1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT01KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuRU1ULCBhZXMoeD1GMTQ3X21jcC5FTVQkbG9uZywgeT1GMTQ3X21jcC5FTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLkRSWVQsIGFlcyh4PUYxNDdfbWNwLkRSWVQkbG9uZywgeT1GMTQ3X21jcC5EUllUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLk1PTlQsIGFlcyh4PUYxNDdfbWNwLk1PTlQkbG9uZywgeT1GMTQ3X21jcC5NT05UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImdyZWVuIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuUE1ULCBhZXMoeD1GMTQ3X21jcC5QTVQkbG9uZywgeT1GMTQ3X21jcC5QTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTUpICsKICAjIGdlb21fcG9seWdvbihkYXRhPUYyNTJfbWNwLkVNVCwgYWVzKHg9RjI1Ml9tY3AuRU1UJGxvbmcsIHk9RjI1Ml9tY3AuRU1UJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTIpICsKICAjIGdlb21fcG9seWdvbihkYXRhPUYyNTJfbWNwLkRSWVQsIGFlcyh4PUYyNTJfbWNwLkRSWVQkbG9uZywgeT1GMjUyX21jcC5EUllUJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTMpICsKICAjIGdlb21fcG9seWdvbihkYXRhPUYyNTJfbWNwLk1PTlQsIGFlcyh4PUYyNTJfbWNwLk1PTlQkbG9uZywgeT1GMjUyX21jcC5NT05UJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTQpICsKICAjIGdlb21fcG9seWdvbihkYXRhPUYyNTJfbWNwLlBNVCwgYWVzKHg9RjI1Ml9tY3AuUE1UJGxvbmcsIHk9RjI1Ml9tY3AuUE1UJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTUpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLkVNVCwgYWVzKHg9RjM2X21jcC5FTVQkbG9uZywgeT1GMzZfbWNwLkVNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC5EUllULCBhZXMoeD1GMzZfbWNwLkRSWVQkbG9uZywgeT1GMzZfbWNwLkRSWVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC5NT05ULCBhZXMoeD1GMzZfbWNwLk1PTlQkbG9uZywgeT1GMzZfbWNwLk1PTlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iZ3JlZW4iLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLlBNVCwgYWVzKHg9RjM2X21jcC5QTVQkbG9uZywgeT1GMzZfbWNwLlBNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NSkgKwogIGdlb21fcG9seWdvbihkYXRhPUY2Nl9tY3AuRU1ULCBhZXMoeD1GNjZfbWNwLkVNVCRsb25nLCB5PUY2Nl9tY3AuRU1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GNjZfbWNwLkRSWVQsIGFlcyh4PUY2Nl9tY3AuRFJZVCRsb25nLCB5PUY2Nl9tY3AuRFJZVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJyZWQiLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GNjZfbWNwLk1PTlQsIGFlcyh4PUY2Nl9tY3AuTU9OVCRsb25nLCB5PUY2Nl9tY3AuTU9OVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJncmVlbiIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUY2Nl9tY3AuUE1ULCBhZXMoeD1GNjZfbWNwLlBNVCRsb25nLCB5PUY2Nl9tY3AuUE1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT01KSArCiAgdGhlbWVfYncoKSArbGFicyh4PSJFYXN0aW5nIChtKSIsIHk9Ik5vcnRoaW5nIChtKSIsdGl0bGU9IlNlYXNvbmFsIEhvbWUgUmFuZ2UgU2hpZnRzIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIsIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgaGp1c3QgPSAwLjUpKQoKbWNwLnNoaWZ0LlRFU1Q1CgpgYGAKRmlndXJlIDggfCBTZWFzb25hbCBob21lIHJhbmdlIHNoaWZ0cyBvZiBmb3VyIGxpemFyZHMuIEVtZXJnZW5jZSBhbmQgcG9zdC1tb25zb29uIHJhbmdlcyBzdGF5IHJlYWxhdGl2ZWx5IHdpdGhpbiBlYWNoIG90aGVyLiBBbGwgc2Vhc29uYWwgcG9seWdvbnMgc3RheSByZWxhdGl2ZWx5IHN0YWJsZSB3aXRob3V0IGFueSBtYWpvciBzaGlmdHMgYXdheSBmcm9tIG90aGVyIHNlYXNvbmFsIHJhbmdlcy4gCgoKCgpUYWJsZSA1IHwgR3JvdXAgbWVhbnMgb2Ygc2Vhc29uYWwgaG9tZSByYW5nZXMgYmV0d2VlbiBTdG9uZSBDYW55b24gKHN1YnNpZGl6ZWQpIGFuZCBPd2wgSGVhZCBCdXR0ZXMgKG5vbi1zdWJzaWRpemVkKS4gVGhlc2UgbWVhbnMgYXJlIGF2ZXJhZ2VkIGFjcm9zcyBzZXguIApgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0Kc2Vhc29uYWw8LXJlYWQuY3N2KCJTQ19TZWFzb25hbF9EYXRhLmNzdiIpCgpsaWJyYXJ5KFJtaXNjKQoKU0VBU19HUlBfTWVhbnMgPC0gc3VtbWFyeVNFKHNlYXNvbmFsLCBtZWFzdXJldmFyPSJIb21lX1JhbmdlXzEwMG1jcCIsIGdyb3VwdmFycz1jKCJFbnZpcm9ubWVudCIsIlNlYXNvbiIpLCBuYS5ybSA9IFRSVUUpCgojIFNFQVNfR1JQX01lYW5zCmthYmxlKFNFQVNfR1JQX01lYW5zLCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdSYXcgR3JvdXAgTWVhbnMgb2YgU2Vhc29uYWwgSG9tZSBSYW5nZXMgYXQgU3RvbmUgQ2FueW9uJykKYGBgCgoKCgpSTUFOT1ZBIG9uIFNlYXNvbmFsIEhvbWUgUmFuZ2VzOgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KbGlicmFyeShsbWU0KQpsaWJyYXJ5KHJlYWRyKQpsaWJyYXJ5KGxtZXJUZXN0KQojIHNlYXNvbmFsPC1yZWFkLmNzdigiU0NfU2Vhc29uYWxfRGF0YS5jc3YiKQoKUk0ubW9kLlNlYXNvbiA8LSBsbWVyKEhvbWVfUmFuZ2VfMTAwbWNwfkVudmlyb25tZW50K1NlYXNvbitTZXgrTitFbnZpcm9ubWVudCpTZWFzb24rKDF8R2lsYSksIGRhdGE9c2Vhc29uYWwpCnN1bW1hcnkoUk0ubW9kLlNlYXNvbikKCiMgYW5vdmEoUk0ubW9kLlNlYXNvbikKCiMgIyBtYXJnaW5hbC5zZWFzb24gPC0gbHNtZWFucyhSTS5tb2QuU2Vhc29uLCAKIyAjICAgICAgICAgICAgICAgICAgICB+IEVudmlyb25tZW50KQojICMgbWFyZ2luYWwuc2Vhc29uCmBgYAoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmFub3ZhKFJNLm1vZC5TZWFzb24pCmBgYAoKCgoKVGFibGUgNiB8IFNlYXNvbmFsIGhvbWUgcmFuZ2UgbWVhbnMgYmV0d2VlbiBTdG9uZSBDYW55b24gKHN1YnNpZGl6ZWQpIGFuZCBPd2wgSGVhZCBCdXR0ZXMgKG5vbi1zdWJzaWRpemVkKSBwb3B1YXRpb25zIGZvciBtYWxlcyBhbmQgZmVtYWxlcy4gVGhlc2UgYXJlIHJhdyBtZWFucyBiZWZvcmUgYmVpbmcgYWRqdXN0ZWQgZm9yIGVudmlyb25tZW50LCBzZWFzb24sIHNleCwgYW5kIHNhbXBsZSBzaXplLgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KU0VBU19HUlBfVEVTVCA8LSBzdW1tYXJ5U0Uoc2Vhc29uYWwsIG1lYXN1cmV2YXI9IkhvbWVfUmFuZ2VfMTAwbWNwIiwgZ3JvdXB2YXJzPWMoIkVudmlyb25tZW50IiwiU2Vhc29uIiwiU2V4IiksIG5hLnJtID0gVFJVRSkKCiMgU0VBU19HUlBfTWVhbnMKa2FibGUoU0VBU19HUlBfVEVTVCwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnU2Vhc29uYWwgTWVhbnMgYnkgU2V4IEJldHdlZW4gUG9wdWxhdGlvbnMnKQpgYGAKCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIFNFQVMuVEVTVDwtZ2dwbG90KFNFQVNfR1JQX1RFU1QsYWVzKHg9U2Vhc29uLHk9SG9tZV9SYW5nZV8xMDBtY3AsZ3JvdXA9RW52aXJvbm1lbnQpKStnZW9tX3BvaW50KGFlcyhzaGFwZSA9IGZhY3RvcihTZXgpKSwgc2l6ZT0yLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC41KSkrZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1Ib21lX1JhbmdlXzEwMG1jcC1zZSwgeW1heD1Ib21lX1JhbmdlXzEwMG1jcCtzZSkscG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSguNSksIHdpZHRoID0gMC4yKStnZ3RpdGxlKCJTZWFzb25hbCBNZWFucyIpK3hsYWIoIlNlYXNvbiIpK3lsYWIoIkFyZWEgKGhhKSB1c2luZyAxMDAlIE1DUCIpK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKIyAKIyBTRUFTLlRFU1Q8LVNFQVMuVEVTVCArIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQuanVzdGlmaWNhdGlvbj1jKDAsMSksCiMgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC4wNSwgMC45NSksCiMgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmtleSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpCiMgU0VBUy5URVNUK3NjYWxlX3hfZGlzY3JldGUobGltaXRzPSBjKCJFbWVyZ2VuY2UiLCJEcnkiLCJNb25zb29uIiwiUG9zdF9Nb25zb29uIikpCgojIFNFQVNfR1JQX1RFU1QkU2Vhc29uX2YgPSBmYWN0b3IoU0VBU19HUlBfVEVTVCRTZWFzb24sCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHM9YygnRW1lcmdlbmNlJywnRHJ5JywnTW9uc29vbicsJ1Bvc3RfTW9uc29vbicpKQojClNFQVMuVEVTVDwtZ2dwbG90KFNFQVNfR1JQX1RFU1QsYWVzKHg9RW52aXJvbm1lbnQseT1Ib21lX1JhbmdlXzEwMG1jcCxncm91cD1jKCJTZWFzb24iKSkpK2dlb21fcG9pbnQoYWVzKHNoYXBlID0gZmFjdG9yKFNleCkpLCBzaXplPTIscG9zaXRpb249cG9zaXRpb25faml0dGVyKC4yKSkrZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1Ib21lX1JhbmdlXzEwMG1jcC1zZSwgeW1heD1Ib21lX1JhbmdlXzEwMG1jcCtzZSkscG9zaXRpb249cG9zaXRpb25fZG9kZ2UoKSx3aWR0aD0uMSkrZ2d0aXRsZSgiU2Vhc29uYWwgTWVhbnMiKSt4bGFiKCJTZWFzb24iKSt5bGFiKCJBcmVhIChoYSkgdXNpbmcgMTAwJSBNQ1AiKSt0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBjb2xvcj0iYmxhY2siLCBzaXplPTE0LCBmYWNlPSJib2xkIikpCgpTRUFTLlRFU1Q8LVNFQVMuVEVTVCArIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmp1c3RpZmljYXRpb249YygwLDEpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb249YyguODIsIDAuOTUpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmtleSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpKQpTRUFTLlRFU1Q8LVNFQVMuVEVTVCtmYWNldF9ncmlkKGNvbHM9dmFycyhTZWFzb24pKQpTRUFTLlRFU1QKYGBgCkZpZ3VyZSA5IHwgUmF3IHNlYXNvbmFsIG1lYW5zIG9mIHNleGVzIGJldHdlZW4gZWFjaCBlbnZpcm9ubWVudC4gKldPUktJTkcgR1JBUEguLi4KCgoKQWRqdXN0ZWQgU2Vhc29uYWwgTWVhbnMKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJNLm1vZC5TZWFzb24gPC0gbG1lcihIb21lX1JhbmdlXzEwMG1jcH5FbnZpcm9ubWVudCtTZWFzb24rU2V4K04rRW52aXJvbm1lbnQqU2Vhc29uKygxfEdpbGEpLCBkYXRhPXNlYXNvbmFsKQoKIyBSTS5tYXJnaW5hbCA8LSBsc21lYW5zKFJNLm1vZC5TZWFzb24sIAojICAgICAgICAgICAgICAgICAgICAgfiBFbnZpcm9ubWVudCkKIyBSTS5tYXJnaW5hbAoKIyMgQ0FUQUdPUklaRSBMU00gR1JBUEggQlkgU0VYIEJFVFdFRU4gRU5WSVJPTk1FTlQ6CnJlZlJNX3NlYXNvbiA8LSBsc21lYW5zKFJNLm1vZC5TZWFzb24sIHNwZWNzID0gYygiRW52aXJvbm1lbnQiLCJTZWFzb24iLCJTZXgiKSkKCiMgcmVmUk1fc2V4CnJlZl9kZlJNX3NlYXNvbiA8LSBhcy5kYXRhLmZyYW1lKHN1bW1hcnkocmVmUk1fc2Vhc29uKSkKcGRfUk0gPC0gcG9zaXRpb25fZG9kZ2UoMC4xKQoKTFNNLlNlYXNIUjwtZ2dwbG90KHJlZl9kZlJNX3NlYXNvbixhZXMoeD1FbnZpcm9ubWVudCx5PWxzbWVhbixncm91cD1jKCJTZWFzb24iKSkpK2dlb21fcG9pbnQoYWVzKHNoYXBlID0gZmFjdG9yKFNleCkpLCBzaXplPTIscG9zaXRpb249cG9zaXRpb25faml0dGVyKC4yKSkrZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1sc21lYW4tU0UsIHltYXg9bHNtZWFuK1NFKSxwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpLHdpZHRoPS4xKStnZ3RpdGxlKCJTZWFzb25hbCBNZWFucyIpK3hsYWIoIlNlYXNvbiIpK3lsYWIoIkFyZWEgKGhhKSB1c2luZyAxMDAlIE1DUCIpK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKCkxTTS5TZWFzSFI8LUxTTS5TZWFzSFIgKyB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5qdXN0aWZpY2F0aW9uPWMoMCwxKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC44MiwgMC45NSksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpCkxTTS5TZWFzSFI8LUxTTS5TZWFzSFIrZmFjZXRfZ3JpZChjb2xzPXZhcnMoU2Vhc29uKSkKTFNNLlNlYXNIUgpgYGAKRmlndXJlIDEwIHwgQWRqdXN0ZWQgc2Vhc29uYWwgaG9tZSByYW5nZSBtZWFucyBvZiBzZXhlcyBiZXR3ZWVuIGVudmlyb25tZW50cy4gKldPUktJTkcgR1JBUEguLi4KCgoKClBvc3QtSG9jIGNvbXBhcmlzb25zIGJldHdlZW4gcG9wdWxhdGlvbnMgZm9yIHNlYXNvbmFsIGhvbWUgcmFuZ2UgYW5hbHlzaXM6CgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KZW1tX3MudCA8LSBlbW1lYW5zKFJNLm1vZC5TZWFzb24sIHBhaXJ3aXNlIH4gRW52aXJvbm1lbnQgfCBTZWFzb24pCmVtbV9zLnQKYGBgCgoKR3JhcGhpY2FsIENvbXBhcmlzb25zIG9mIHNlYXNvbnMgYmV0d2VlbiB0aGUgdHdvIHBvcHVsYXRpbnM6CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIHBsb3QoU2V4LmVtbS5zZWFzLCBjb21wYXJpc29ucyA9IFRSVUUpCnBsb3QoZW1tX3MudCwgY29tcGFyaXNvbnMgPSBUUlVFKQpgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApGaWd1cmUgMTEgfCBQYWlyd2lzZSBjb21wYXJpc29ucyBvZiBlYWNoIHNlYXNvbiBiZXR3ZWVuIGVudmlyb25tZW50cy4gT3ZlcmxhcHBpbmcgcmVkIGJhcnMgaW5kaWNhdGUgbm8gc3RhdGlzdGljYWwgZGlmZmVyZW5jZS4gCgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KIyBTZWFzLk1lYW5zVDwtZW1tZWFucyhSTS5tb2QuU2Vhc29uLCBsaXN0KHBhaXJ3aXNlIH4gRW52aXJvbm1lbnQsIHBhaXJ3aXNlIH4gU2Vhc29uKSkKIyBTZWFzLk1lYW5zVAoKZW1tX3MudDQgPC0gZW1tZWFucyhSTS5tb2QuU2Vhc29uLCBwYWlyd2lzZSB+IFNlYXNvbiB8IEVudmlyb25tZW50KQplbW1fcy50NApgYGAKCgpHcmFwaGljYWwgQ29tcGFyaXNvbnMgYmV0d2VlbiBzZWFzb25zIHdpdGhpbiB0aGUgdHdvIHBvcHVsYXRpb25zOgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KcGxvdChlbW1fcy50NCwgY29tcGFyaXNvbnMgPSBUUlVFKQpgYGAKRmlndXJlIDEyIHwgUGFpcndpc2UgY29tcGFyaXNvbnMgYmV0d2VlbiBzZWFzb25zIHdpdGhpbiBlYWNoIGVudmlyb25tZW50LiBPdmVybGFwcGluZyByZWQgYmFycyBpbmRpY2F0ZSBubyBzdGF0aXN0aWNhbCBkaWZmZXJlbmNlLiAKCgoKUGFpcndpc2Ugc2Vhc29uYWwgY29tcGFyaXNvbnMgYmV0d2VlbiBzZXhlcyBvZiB0aGUgc3Vic2lkaXplZCBwb3B1bGF0aW9uCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpzdWIgPC0gc3Vic2V0KHNlYXNvbmFsLCBFbnZpcm9ubWVudCA9PSAic3Vic2lkaXplZCIpCgpSTS5tb2QuU3ViIDwtIGxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+U2Vhc29uK1NleCtOK1NlYXNvbipTZXgrKDF8R2lsYSksIGRhdGE9c3ViKQoKZW1tX3MudDUgPC0gZW1tZWFucyhSTS5tb2QuU3ViLCBwYWlyd2lzZSB+IFNleCB8IFNlYXNvbikKZW1tX3MudDUgCmBgYAoKR3JhcGhpY2FsIENvbXBhcmlzb25zIGJldHdlZW4gc2V4IHdpdGhpbiB0aGUgc3Vic2lkaXplZCBwb3B1bGF0aW9uOgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KcGxvdChlbW1fcy50NSwgY29tcGFyaXNvbnMgPSBUUlVFKQpgYGAKCgoKVGFibGUgNyB8IE1lYW4gaW5kaXZpZHVhbCBzZWFzb2FubCBob21lIHJhbmdlcyBwb29sZWQgZnJvbSB0aGUgZW50aXJlIHN0dWR5IHBlcmlvZC4gTWlzc2luZyB2YWx1ZXMgYXJlIGRlcGljdGVkIHdoZXJlIG5vIGxvY2F0aW9ucyBmb3IgdGhhdCBhbmltYWwgZHVyaW5nIHRoYXQgcGVyaW9kIHdlcmUgc3VjY2Vzc2Z1bGwuCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpTZWFzLkluZC5NZWFuczwtcmVhZC5jc3YoIlNlYXNvbmFsIEhSIFRhYmxlLmNzdiIpCmthYmxlKFNlYXMuSW5kLk1lYW5zLCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdTZWFzb25hbCBJbmRpdmlkdWFsIEhvbWUgUmFuZ2VzLicpCmBgYAoKCgoKCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5HaWxhIE1vbnN0ZXIgSG9tZSBSYW5nZSBPdmVybGFwIG9mIDEwMCUgTUNQcy48L3NwYW4+CgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQoKIyBtY3BfYW5hbHlzaXMuUE9MWSA8LSBmdW5jdGlvbihmaWxlbmFtZSwgcGVyY2VudGFnZSl7CiMgICBkYXRhIDwtIHJlYWQuY3N2KGZpbGUgPSBmaWxlbmFtZSxzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCiMgICBkYXRhLnNwIDwtIGRhdGFbLCBjKCJMSVpBUkROVU1CRVIiLCAiRUFTVElORyIsICJOT1JUSElORyIpXQojICAgY29vcmRpbmF0ZXMoZGF0YS5zcCkgPC0gYygiRUFTVElORyIsICJOT1JUSElORyIpCiMgICBwcm9qNHN0cmluZyhkYXRhLnNwKSA8LSBDUlMuU0MKIyAgIG1jcF9vdXQgPC0gbWNwKGRhdGEuc3AsIHBlcmNlbnRhZ2UsIHVub3V0PSJoYSIpCiMgfQoKTTY3X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vTTY3L002NyAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpNNjlfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NNjkvTTY5IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCk0yNTVfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NMjU1L00yNTUgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKTTIxNV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00yMTUvTTIxNSAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpNMTRfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NMTQvTTE0IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NMTE5L00xMTkgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00xMTIvTTExMiAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQoKRjY2X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjY2L0Y2NiAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMzZfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMzYvRjM2IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYyNTJfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMjUyL0YyNTIgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjIxNF9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YyMTQvRjIxNCAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMjAwX01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjIwMC9GMjAwIC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMTQ3L0YxNDcgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0Nl9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YxNDYvRjE0NiAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMTM3X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjEzNy9GMTM3IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYxMzVfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMTM1L0YxMzUgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YxMTQvRjExNCAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMTA0X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjEwNC9GMTA0IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCgpNYWxlLk1DUCA8LSByYmluZChNNjdfTUNQLE02OV9NQ1AsTTI1NV9NQ1AsTTIxNV9NQ1AsTTE0X01DUCxNMTE5X01DUCxNMTEyX01DUCkKRmVtYWxlLk1DUCA8LSByYmluZChGNjZfTUNQLEYzNl9NQ1AsRjI1Ml9NQ1AsRjIxNF9NQ1AsRjIwMF9NQ1AsRjE0N19NQ1AsRjE0Nl9NQ1AsRjEzN19NQ1AsCiAgICAgICAgICAgICAgICAgICAgRjEzNV9NQ1AsRjExNF9NQ1AsRjEwNF9NQ1ApCgptYXB2aWV3T3B0aW9ucyhiYXNlbWFwcyA9IGMoIk9wZW5TdHJlZXRNYXAiLCJFc3JpLldvcmxkSW1hZ2VyeSIsIk9wZW5Ub3BvTWFwIiksCiAgICAgICAgICAgICAgIG5hLmNvbG9yID0gIm1hZ2VudGEiLAogICAgICAgICAgICAgICBsYXllcnMuY29udHJvbC5wb3MgPSAidG9wbGVmdCIpCgptYXB2aWV3KE1hbGUuTUNQLCBsZWdlbmQ9RiwgemNvbD0iaWQiLCBjb2wucmVnaW9ucyA9IGMoImJsdWUiKSwgYWxwaGEucmVnaW9ucz0wLjMpICsgCiAgbWFwdmlldyhGZW1hbGUuTUNQLCBsZWdlbmQ9RiwgemNvbCA9ICJpZCIsIGNvbC5yZWdpb25zID0gYygicmVkIiksIGFscGhhLnJlZ2lvbnM9MC4zKQpgYGAKRmlndXJlIDEzIHwgSW50ZXJhY3RpdmUgbWFwOiBIb21lIFJhbmdlIG92ZXJsYXAgYnkgc2V4IG9mIDEwMCUgTUNQcyBhdCBTdG9uZSBDYW55b24uIFJlZCBwb2x5Z29ucyByZXByZXNlbnQgZmVtYWxlIGxpemFyZHMsIGFuZCBibHVlIHJlcHJlc2VudHMgbWFsZSBsaXphcmRzLiAKCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQoKa2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbiA8LSBmdW5jdGlvbihmaWxlbmFtZSwgcGVyY2VudGFnZSl7CiAgZGF0YSA8LSByZWFkLmNzdihmaWxlID0gZmlsZW5hbWUsc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQogIGRhdGEuc3AgPC0gZGF0YVssIGMoIkxJWkFSRE5VTUJFUiIsICJFQVNUSU5HIiwgIk5PUlRISU5HIildCiAgY29vcmRpbmF0ZXMoZGF0YS5zcCkgPC0gYygiRUFTVElORyIsICJOT1JUSElORyIpCiAgcHJvajRzdHJpbmcoZGF0YS5zcCkgPC0gQ1JTLlNDCiAga2RlPC1rZXJuZWxVRChkYXRhLnNwLCBoPSJocmVmIiwga2Vybj0iYml2bm9ybSIsIGdyaWQ9MTAwMCkKICB2ZXIgPC0gZ2V0dmVydGljZXNocihrZGUsIHBlcmNlbnRhZ2UpCiAgdmVyQHByb2o0c3RyaW5nPC1DUlMuU0MKICB2ZXIKfQoKTTY3X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9NNjcvTTY3IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTY5X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9NNjkvTTY5IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTI1NV9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTI1NS9NMjU1IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTIxNV9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTIxNS9NMjE1IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTE0X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9NMTQvTTE0IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTExOV9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTExOS9NMTE5IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTExMl9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTExMi9NMTEyIC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKCkY2Nl9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vRjY2L0Y2NiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYzNl9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vRjM2L0YzNiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYyNTJfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YyNTIvRjI1MiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYyMTRfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YyMTQvRjIxNCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYyMDBfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YyMDAvRjIwMCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxNDdfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxNDcvRjE0NyAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxNDZfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxNDYvRjE0NiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMzdfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMzcvRjEzNyAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMzVfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMzUvRjEzNSAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMTRfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMTQvRjExNCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMDRfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMDQvRjEwNCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCgpNYWxlLktERSA8LSByYmluZChNNjdfS0RFLE02OV9LREUsTTI1NV9LREUsTTIxNV9LREUsTTE0X0tERSxNMTE5X0tERSxNMTEyX0tERSkKRmVtYWxlLktERSA8LSByYmluZChGNjZfS0RFLEYzNl9LREUsRjI1Ml9LREUsRjIxNF9LREUsRjIwMF9LREUsRjE0N19LREUsRjE0Nl9LREUsRjEzN19LREUsCiAgICAgICAgICAgICAgICAgICAgRjEzNV9LREUsRjExNF9LREUsRjEwNF9LREUpCgptYXB2aWV3T3B0aW9ucyhiYXNlbWFwcyA9IGMoIk9wZW5TdHJlZXRNYXAiLCJFc3JpLldvcmxkSW1hZ2VyeSIsIk9wZW5Ub3BvTWFwIiksCiAgICAgICAgICAgICAgIG5hLmNvbG9yID0gIm1hZ2VudGEiLAogICAgICAgICAgICAgICBsYXllcnMuY29udHJvbC5wb3MgPSAidG9wbGVmdCIpCgptYXB2aWV3KE1hbGUuS0RFLCBsZWdlbmQ9RiwgemNvbD0iaWQiLCBjb2wucmVnaW9ucyA9IGMoImJsdWUiKSwgYWxwaGEucmVnaW9ucz0wLjMpICsgCiAgbWFwdmlldyhGZW1hbGUuS0RFLCBsZWdlbmQ9RiwgemNvbCA9ICJpZCIsIGNvbC5yZWdpb25zID0gYygicmVkIiksIGFscGhhLnJlZ2lvbnM9MC4zKQpgYGAKRmlndXJlIDE0IHwgSW50ZXJhY3RpdmUgbWFwOiBIb21lIFJhbmdlIG92ZXJsYXAgYnkgc2V4IG9mIDk1JSBLREVzIGF0IFN0b25lIENhbnlvbi4gUmVkIHBvbHlnb25zIHJlcHJlc2VudCBmZW1hbGUgbGl6YXJkcywgYW5kIGJsdWUgcmVwcmVzZW50cyBtYWxlIGxpemFyZHMuIAoKCgoKVGhlIFN0b25lIENhbnlvbiBwb3B1bGF0aW9uIHNlZW1zIHRvIGV4aGliaXQgZ3JlYXRlciBmZW1hbGUtZmVtYWxlIG92ZXJsYXAgYXMgd2VsbCBhcyBjb25zaWRlcmFibGUgb3ZlcmxhcCBvZiBtYWxlLWZlbWFsZSBob21lIHJhbmdlcy4gVGhlcmUgYXBwZWFycyB0byBiZSBsaW1pdGVkIG1hbGUtbWFsZSBvdmVybGFwLCB3aXRoIG9jY3VyYW5jZSBoYXBwZW5pbmcgaW4gb25seSB0d28gbWFsZS1tYWxlIGhvbWUgcmFuZ2UgcG9seWdvbnMuIFRoaXMgZmluZGluZyBpcyBpbiBjb250cmFzdCB0byB0aGUgT3dsIEhlYWQgYnV0dGVzIHN0dWR5IHdoaWNoIHJldmVhbGVkIHRoYXQgdGhlcmUgd2FzIGEgbGFyZ2UgZGVncmVlIG9mIG92ZXJsYXAgYW1vbmcgbWFsZS1mZW1hbGUgYW5kIG1hbGUtbWFsZSBvdmVybGFwcyAoVGFibGUgeCkuIEdpbGxhcmRvIGNvbmNsdWRlZCB0aGF0LCBpbiB0aGVpciBzdHVkeSwgdGhlIGhpZ2ggZGVncmVlIG9mIG92ZXJsYXAgaW4gbWFsZXMtbWFsZXMgaW50ZXJhY3Rpb25zIG1heSBiZSBkdWUgdG8gaGF2aW5nIGxhcmdlciBob21lIHJhbmdlcyBmb3IgbWF0ZSBzZWFyY2hpbmcgYWN0aXZpdGllcy4gTWFsZXMgbWF5IGhhdmUgYW5kIGluY3JlYXNlZCBob21lIHJhbmdlIHNpemUgdG8gbWF4aW1pemUgdGhlaXIgYWNjZXNzIHRvIG11bHRpcGxlIGZlbWFsZXMuIFNoZSBjb25jbHVkZWQgdGhhdCB0aGUgbGFjayBvZiBmZW1hbGUtZmVtYWxlIG92ZXJsYXAgbWF5IGJlIGR1ZSB0byBzbWFsbGVyIGhvbWUgcmFuZ2Ugc2l6ZXMuIAoKQXQgU3RvbmUgQ2FueW9uLCBtYWxlcyBoYXZlIHJlZHVjZWQgaG9tZSByYW5nZSBzaXplcyAoVGFibGUgNjsgRmlnLiA0KS4gSG93ZXZlciwgbWFsZXMgc3RpbGwgcmV0YWluIGhvbWUgcmFuZ2Ugb3ZlcmxhcCB3aXRoIG11bHRpcGxlIGZlbWFsZXMgd2hpbGUgaGF2aW5nIHJlZHVjZWQgY29udGFjdCB3aXRoIG90aGVyIG1hbGVzLiBUaGlzIG1heSBiZSBpbiByZXNwb25zZSB0byBudXRyaWVudCBzdWJzaWRpZXMgdGhhdCByZWR1Y2UgdGhlIG5lZWQgdG8gaGF2ZSBleHBhbmRlZCBob21lIHJhbmdlIHNpemVzIGZvciBmb3JhZ2luZyBhY3Rpdml0aWVzIGZvciBib3RoIG1hbGVzIGFuZCBmZW1hbGVzLiBUaGVyZSBtYXkgYWxzbyBiZSBhIGhpZ2hlciBkZW5zaXR5IG9mIGZlbWFsZXMgYXMgYSByZXNwb25zZSB0byByZXNvdXJjZSBhdmFpbGFiaWxpdHkgYW5kIHJlZHVjZWQgcmFuZ2UgcmVxdWlyZW1lbnRzLiBNYWxlcyBhcmUgbm90IGZvcmNlZCB0byBleHBhbmQgaG9tZSByYW5nZXMgZm9yIG1hdGUgc2VhcmNoaW5nIHRvIHRoZSBleHRhbnQgdGhhdCBpbmRpdmlkdWFscyBhdCBPd2wgSGVhZCBCdXR0ZXMgbWF5IGJlIHN1YmplY3QgdG8uIAoKCgpUYWJsZSA4IHwgSG9tZSByYW5nZSBvdmVybGFwIG9mIEdpbGEgTW9uc3RlcnMgYXQgdGhlIG51dHJpZW50IHN1YnNpZGl6ZWQgc2l0ZS4gTWFsZS1tYWxlIG92ZXJsYXBzIG9ubHkgb2NjdXJlZCBiZXR3ZWVuIHR3byBwYWlycyBvZiBtYWxlczogTTE0LU02OSBhbmQgTTExOS1NMjE1IGF0IDAuNSBoYS4gYW5kIDE5LjUgaGEuIHJlc3BlY3RpdmVseSBhbmQgd2VyZSB0aGVyZWZvcmUgbm90IGluY2x1ZGVkIGluIHRoZSB0YWJsZS4gCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpPTF9UYWJsZTwtcmVhZC5jc3YoIk92ZXJMYXBfVGFibGUuY3N2IikKCmthYmxlKE9MX1RhYmxlLCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdIb21lIHJhbmdlIG92ZXJsYXAgb2YgU3RvbmUgQ2FueW9uIEdpbGEgTW9uc3RlcnMgdXNpbmcgMTAwJSBNQ1BzLicpCmBgYAoKCgoKPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPkdpbGEgTW9uc3RlciBQcm9wb3J0aW9uIG9mIFJlZnVnZSBVc2UuPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWl4ZWQgZWZmZWN0cyBSTUFOT1ZBIGZvciBzZWFzb25hbCByZWZ1Z2UgdXNlLiBSZWZ1Z2UgY2F0YWdvcml6YXRpb25zIGluY2x1ZGUgUm9jaywgQnVycm93IGFuZCBNaWRkZW4uCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9ClJlZnVnaWEgPC0gcmVhZC5jc3YoJy4vUmVmdWdlX1VzZS9SZWZ1Z2lhX0lucHV0LmNzdicpCgpSZWZfSW5kPC1sbWVyKEFWR19QUk9QX1lSX0xJWn5DT1ZFUlRZUEUrU0VBU09OK1NFWCtZRUFSK0NPVkVSVFlQRSpTRUFTT04rKDF8TElaQVJETlVNQkVSKSxkYXRhID0gUmVmdWdpYSkKc3VtbWFyeShSZWZfSW5kKQpgYGAKCkFOT1ZBIHRhYmxlIG9mIHJlZnVnZSB1c2UgUk1BTk9WQSBmb3IgY29tcGxldGUgZGF0YSBzZXQ6CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmFub3ZhKFJlZl9JbmQpCmBgYAoKYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KZW1tX3JlZnVnZSA8LSBlbW1lYW5zKFJlZl9JbmQsIHBhaXJ3aXNlIH4gQ09WRVJUWVBFIHwgU0VBU09OKQplbW1fcmVmdWdlCmBgYAoKCgpSTUFOT1ZBIG9mIHRoZSBlbnRpcmUgZGF0YSBzZXQgc3VnZ2VzdGVkIHRoYXQgdGhlcmUgd2FzIG5vIGFmZmVjdCBvZiB5ZWFyIG9uIHJlZnVnZSB1c2UgCihkZiA9IDUsIEYgPSAxLjk0LCBQID0gMC4wOSkuIFRoZXJlZm9yZSwgSSBwZXJmb3JtZWQgTWl4ZWQgRWZmZWN0cyBSTUFOT1ZBIGZvciBlYWNoIHJlZnVnZSB0eXBlIHdoaWxlIG5vdCBpbmNsdWRpbmcgeWVhciBpbiB0aGUgbW9kZWwsIHRoZW4gY29uZHVjdGVkIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBlYWNoIHJlZnVnZSB0eXBlIGFjcm9zcyBzZWFzb25zLgoKIAogClJhbiBSTUFOT1ZBIGZvciBlYWNoIHJlZnVnZSB0eXBlIGFuZCBwYWlyd2lzZSBjb21wYXJpc29ucyBhY3Jvc3MgZWFjaCBzZWFzb246CgpSb2NrcwpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQoKUm9ja3MgPC0gc3Vic2V0KFJlZnVnaWEsIENPVkVSVFlQRSA9PSAiUm9ja3MiKQojIFZpZXcoUm9ja3MpCgpSb2Nrc19tb2Q8LWxtZXIoU0VBU19QUk9QX0xJWn5TRUFTT04rU0VYK1NFQVNPTipTRVgrKDF8TElaQVJETlVNQkVSKSxkYXRhID0gUm9ja3MpCiMgc3VtbWFyeShSb2Nrc19tb2QpCmFub3ZhKFJvY2tzX21vZCkKYGBgCgpQYWlyd2lzZSBjb21wYXJpc29ucyBiZXR3ZWVuIHNlYXNvbnMgZm9yIHJvY2sgcmVmdWdlIHNpdGVzOgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIGF0dGFjaChSb2NrcykKIyBwYWlyd2lzZS50LnRlc3QoQVZHX1BST1BfWVJfTElaLFNFQVNPTiwgcC5hZGogPSAiYm9uZmVycm9uaSIpCgplbW1fcm9ja3MgPC0gZW1tZWFucyhSb2Nrc19tb2QsIHBhaXJ3aXNlIH4gU0VBU09OKQplbW1fcm9ja3MKYGBgCgoKCkJ1cnJvdwpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpCdXJyb3cgPC0gc3Vic2V0KFJlZnVnaWEsIENPVkVSVFlQRSA9PSAiQnVycm93IikKIyBWaWV3KEJ1cnJvdykKCkJ1cnJvdy5tb2Q8LWxtZXIoU0VBU19QUk9QX0xJWn5TRUFTT04rU0VYK1NFQVNPTipTRVgrKDF8TElaQVJETlVNQkVSKSxkYXRhID0gQnVycm93KQojIHN1bW1hcnkoQnVycm93Lm1vZCkKYW5vdmEoQnVycm93Lm1vZCkKYGBgCgpQYWlyd2lzZSBjb21wYXJpc29ucyBiZXR3ZWVuIHNlYXNvbnMgZm9yIGJ1cnJvdyByZWZ1Z2Ugc2l0ZXM6CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgYXR0YWNoKEJ1cnJvdykKIyBwYWlyd2lzZS50LnRlc3QoQVZHX1BST1BfWVJfTElaLFNFQVNPTiwgcC5hZGogPSAiYm9uZmVycm9uaSIpCgplbW1fYnVycm93IDwtIGVtbWVhbnMoQnVycm93Lm1vZCwgcGFpcndpc2UgfiBTRUFTT04pCmVtbV9idXJyb3cKYGBgCgoKCk1pZGRlbgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpNaWRkZW4gPC0gc3Vic2V0KFJlZnVnaWEsIENPVkVSVFlQRSA9PSAiTWlkZGVuIikKIyBWaWV3KE1pZGRlbikKCk1pZGRlbi5tb2Q8LWxtZXIoU0VBU19QUk9QX0xJWn5TRUFTT04rU0VYK1NFQVNPTipTRVgrKDF8TElaQVJETlVNQkVSKSxkYXRhID0gTWlkZGVuKQojIHN1bW1hcnkoTWlkZGVuLm1vZCkKYW5vdmEoTWlkZGVuLm1vZCkKYGBgCgpQYWlyd2lzZSBjb21wYXJpc29ucyBiZXR3ZWVuIHNlYXNvbnMgZm9yIG1pZGRlbiByZWZ1Z2Ugc2l0ZXM6CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgYXR0YWNoKE1pZGRlbikKIyBwYWlyd2lzZS50LnRlc3QoQVZHX1BST1BfWVJfTElaLFNFQVNPTiwgcC5hZGogPSAiYm9uZmVycm9uaSIpCgplbW1fbWlkZGVuIDwtIGVtbWVhbnMoTWlkZGVuLm1vZCwgcGFpcndpc2UgfiBTRUFTT04pCmVtbV9taWRkZW4KYGBgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIEFuYWx5c2VzIHN1Z2dlc3RzIHRoYXQgdGhlcmUgaXMgYW4gZWZmZWN0IG9mIHNlYXNvbiBhY3Jvc3MgYWxsIHRocmVlIHJlZnVnZSB0eXBlcywgYnV0IHRoZXJlIGlzIG5vIGludGVyYWN0aW9uIG9mIHNleCBhbmQgc2Vhc29uIG9uIGNob3NlbiByZWZ1Z2UgdHlwZXMgKFRhYmxlIDExKS4gQmVmb3JlIHBvc3QtaG9jIHBhaXJ3aXNlIGNvbXBhcmlzb25zLCB0aGUgcHJvcG9ydGlvbiBvZiByZWZ1Z2UgdXNlIGZvciByb2NrcyB3YXMgaGlnaGVyIGluIGVtZXJnZW5jZSAoMC4zNykuIFRoaXMgbWF5IGJlIGR1ZSB0byBHaWxhIE1vbnN0ZXJzIHByZWZlcmluZyBtb3JlIHJvY2t5IHJlZnVnaWEgZm9yIGhpYmVybmFjdWxhIHVzZS4gSG93ZXZlciwgbGl6YXJkcyBzZWVtIHRvIGhhdmUgdXNlZCByb2NreSByZWZ1Z2lhIGluIHNtYWxsZXIgcHJvcG9ydGlvbnMgdGhyb3VnaHQgdGhlIGRyeSwgbW9uc29vbiBhbmQgcG9zdC1tb25zb29uIHNlYXNvbnMgKFRhYmxlIDkpLiBEdXJpbmcgdGhlIGRyeSBzZWFzb24gR2lsYSBNb25zdGVycyBleGhpYml0ZWQgYSBoaWdoZXIgcHJvcG9ydGlvbiBvZiByZWZ1Z2UgdXNlIGluIGJ1cnJvd3MgKDAuMjYpLCBidXQgbWFpbnRhaW5lZCBhYm91dCB0aGUgc2FtZSB1c2Ugb2YgYnVycm93cyB0aHJvdWdoIHRoZSBwb3N0LW1vbnNvb24gc2Vhc29uIChUYWJsZXMgOS0xMCkuIEdpbGEgTW9uc3RlcnMgY2hvc2UgbWlkZGVuIHJlZnVnZSB0eXBlcyBvbmx5IGluIHRoZSBkcnkgYW5kIG1vbnNvb24gc2Vhc29ucyAoMC4yMSBhbmQgMC4yMyByZXNwZWN0aXZlbHkpLiBIb3dldmVyLCBib3RoIHRoZSBidXJyb3cgYW5kIG1pZGRlbiByZWZ1Z2UgdHlwZXMgd2VyZSBib3RoIHVzZWQgdGhyb3VnaHRvdXQgdGhlIGRyeSBhbmQgbW9uc29vbiBzZWFzb25zLiAKCiAgUG9zdC1Ib2MgYW5hbHlzZXMgc3VnZ2VzdGVkIHRoYXQgdGhlcmUgd2FzIHNvbWUgZGlmZmVyZW50aWF0ZWQgcmVmdWdlIHNlbGVjdGlvbiBhY3Jvc3Mgc2Vhc29ucy4gUm9jayByZWZ1Z2UgdHlwZXMgc2VlbWVkIHRvIGJlIGdlbmVyYWxseSBzZWxlY3RlZCBmb3IgYWNyb3NzIGFsbCBmb3VyIHNlYXNvbnMsIGFsdGhvdWdoIHRoZXJlIHdhcyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgaW4gcHJvcG9ydGlvbmFsIHVzZSBkdXJpbmcgcG9zdC1tb25zb29uLiBCdXJyb3dzIHdlcmUgc2VsZWN0ZWQgZm9yIHNpZ25pZmljYW50bHkgbW9yZSBkdXJpbmcgdGhlIGRyeSwgbW9uc29vbiBhbmQgcG9zdC1tb25zb29uIHNlYXNvbnMgd2l0aCBtaW5pbWFsIHVzZSBkdXJpbmcgZW1lcmdlbmNlLCB3aGVyZSB0aGV5IHNlZW0gdG8gYmUgbW9yZSBhc3NvY2lhdGVkIHdpdGggcm9jayByZWZ1Z2lhICAoVGFibGUgMTAuKS4gTWlkZGVuIHR5cGUgcmVmdWdlIHNpdGVzIHdlcmUgcHJlZG9taW5hbnRseSBjaG9zZW4gd2l0aGluIHRoZSBkcnkgYW5kIG1vbnNvb24gc2Vhc29ucywgYnV0IHdpdGggbWluaW1hbCB1c2UgaW4gdGhlIHBvc3QtbW9uc29vbiAoVGFibGUgMTApLiBNaWRkZW4gcmVmdWdlIHR5cGVzIHdlcmUgbm90IGNob3NlbiBvZnRlbiwgd2l0aCByb2NrIGFuZCBidXJyb3cgdHlwZXMgY2hvc2VuIG1vcmUgZnJlcXVlbnRseS4gR2VuZXJhbGx5LCByb2NrIGFuZCBidXJyb3cgcmVmdWdlIHR5cGVzIHdlcmUgdXNlZCByZWFkaWx5IHdpdGhvdXQgbXVjaCBwcmVmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBhZnRlciBlbWVyZ2VuY2UuCgoKClRhYmxlIDkgfCBNZWFuIHByb3BvcnRpbmFsIHVzZSBvZiByZWZ1Z2UgdHlwZXMgYWNyb3NzIGVhY2ggc2Vhc29uIGJ5IHNleC4KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJlZnVnZS5Qcm9wPC1yZWFkLmNzdigiLi9SZWZ1Z2VfVXNlL1JlZnVnZSBQcm9wIFRhYmxlLmNzdiIpCgprYWJsZShSZWZ1Z2UuUHJvcCwgZm9ybWF0ID0gInBhbmRvYyIsIGxvbmd0YWJsZT1UUlVFLCBjYXB0aW9uID0gJ1JlZnVnZSBVc2UgUHJvcG9ydGlvbmFsIE1lYW5zIGJ5IFNleCBhbmQgU2Vhc29uJykKYGBgCgoKCgpUYWJsZSAxMCB8IFBvc3QtSG9jIGNhbXBhcmlzb25zIG9mIGVhY2ggcmVmdWdlIHR5cGUgYmV0d2VlbiBzZWFzb25hbCBjb21iaW5hdGlvbnMuCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpSZWZ1Z2UuU2lnPC1yZWFkLmNzdigiLi9SZWZ1Z2VfVXNlL1JlZnVnZSBTaWcgVGFibGUuY3N2IikKCmthYmxlKFJlZnVnZS5TaWcsIGZvcm1hdCA9ICJwYW5kb2MiLCBsb25ndGFibGU9VFJVRSxjYXB0aW9uID0gJ1Bvc3QgSG9jIFBhaXJ3aXNlIENvbXBhcmlzb25zIG9mIFJlZnVnZSBUeXBlcycpCmBgYAoKCgpUYWJsZSAxMS4gQU5PVkEgdGFibGUgYWZ0ZXIgY29uZHVjdGluZyBNaXhlZCBFZmZlY3RzIFJNQU5PVkEgZm9yIGVhY2ggcmVmdWdlIHR5cGUgYWNyb3NzIHNlYXNvbnMuCmBgYHtyIFJNIEFOT1ZBIHRhYmxlIGZvciBSZWZ1Z2UgVXNlLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KUk0udGFibGU8LXJlYWQuY3N2KCIuL1JlZnVnZV9Vc2UvUk0gQU5PVkEgdGFibGUgUmVmdWdlLmNzdiIpCgprYWJsZShSTS50YWJsZSwgZm9ybWF0ID0gInBhbmRvYyIsIGxvbmd0YWJsZT1UUlVFLGNhcHRpb24gPSAnQU5PVkEgVGFibGUgb2YgUk0gQW5hbHlzaXMgZm9yIFJlZnVnZSBVc2UnKQpgYGAKCgoKCg==